エラー C2679:バイナリ '>>' :'std::string' 型の右側のオペランドを取る演算子が見つかりません (または受け入れられる変換がありません)

StackOverflow https://stackoverflow.com/questions/1631338

質問

タイトルは別の文脈ですでに誰かから質問されているため、混同しないでください。

Visual C++ コンパイラ (VS2008) の以下のコードはコンパイルされず、代わりにこの例外がスローされます。

std::ifstream input (fileName);   

while (input) {
  string s;
  input >> s;
  std::cout << s << std::endl;
};

ただし、このコードは cygwin g++ で正常にコンパイルされます。何かご意見は?

役に立ちましたか?

解決

次のヘッダーをすべて含めましたか?

  • &lt; fstream&gt;
  • &lt; istream&gt;
  • &lt; iostream&gt;
  • &lt; string&gt;

&lt; string&gt; を忘れたと思います。

補足説明: std :: cout および std :: endl である必要があります。

他のヒント

@sbi の回答に追加すると、私の場合は&lt; stringではなく&lt; string&gt; が含まれていました。 h&gt; (VS 2017の下)。

次の回答を参照してください:類似のケースの回答

include <string>

文字列ヘッダー ファイルを一緒にインクルードしてみてください <iostream> ファイル。一部のコンパイラでは、 <string> コンパイラごとに設定が異なり、'#' 記号で始まるプリプロセッサ ファイルを読み取って obj ファイルを生成するのはコンパイラであるためです。

他の人が言ったことに加えて。アプリケーションを正常にコンパイルするには、次のコードが必要でした。

std::cout << s.c_str() << std::endl;

別の回避策は、プロジェクトのプロパティに移動することです-&gt;一般-&gt;文字セット]を選択し、[Ues Multi-Byte Character Set]を選択します。 (文字列を出力するためにc_str()を使用する必要はありません)

MBCSを使用することには不利な点があるため、ソフトウェアをローカライズする予定がある場合は、これに反対します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top