web-dev-qa-db-ja.com

cin >>「これらのオペランドに一致する演算子はありません」

私はVisual Studio 2012コンソールモードでC++プロジェクトに取り組んでおり、cin関数でこの奇妙で永続的なエラーが発生し続けます。

>>赤い線が表示され、プログラムからno operator matches these operands。すべての配列要素を別のメソッドで初期化しました。

以下はスニペットの例です(実際のコードにはさらに多くの変数が含まれています)。

for (int i = 0; i < 14; i++)
{
    cout << "For taxi: " << i+1 << "Please input the taxi rank they are currently parked at, if at all ('Train Station', 'South Walls' or 'Chell Road')" << endl;
    cin >> allTaxiDetails[i].taxiRank;
}

allTaxiDetailsは、次の構造であるデータ型「taxiDetails」の配列です。

struct taxiDetails { 
    string taxiDriverSurname; 
    int taxiID; 
    int taxiCoordinates; 
    int numberOfSeats; 
    bool taxiContainsCustomerYesNo; 
    bool WheelChairAccessibleVehicle; 
    string taxiRank; 
    fareDetails fareDetailsForTaxi; 
    bool taxiAvaliable; 
};
11
user3163612

問題は、stringに_operator>>_メソッドがないことですが、あります...

  1. そのファイルの先頭にある_#include <string>_を忘れましたか?
  2. 多分getline(std::cin, allTaxiDetails[I].taxiRank, '\n');を使ってみてください。
  3. 構造体に_operator>>_を定義します。
27
Keeler

何らかの方法でクラス定義を取得したstd::stringタイプのオブジェクトを読み込もうとしているようです(たとえば、<iostream>を含めることによって)。しかし、必要なすべての操作を取得できませんでした。 <string>が含まれていることを確認してください:

#include <string>
// ...

一部のヘッダーは他のいくつかのクラスの定義を提供しますが、実際には定義を取得するためにヘッダー全体を使用しません。 std::stringはIOStreamsを宣言するために必要な場所にあるため、完全なヘッダーを含めることによっては定義されない可能性が高くなります。

9
Dietmar Kühl

忘れる#include <string>この重要なヘッダーはエラーの原因です。それはC++の初心者として私に起こりました。

7
WayneX