エラー C2679:バイナリ '>>' :'std::string' 型の右側のオペランドを取る演算子が見つかりません (または受け入れられる変換がありません)
-
06-07-2019 - |
質問
タイトルは別の文脈ですでに誰かから質問されているため、混同しないでください。
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ではなく
(VS 2017の下)。&lt; string&gt;
が含まれていました。 h&gt;
次の回答を参照してください:類似のケースの回答
include <string>
文字列ヘッダー ファイルを一緒にインクルードしてみてください <iostream>
ファイル。一部のコンパイラでは、 <string>
コンパイラごとに設定が異なり、'#' 記号で始まるプリプロセッサ ファイルを読み取って obj ファイルを生成するのはコンパイラであるためです。
他の人が言ったことに加えて。アプリケーションを正常にコンパイルするには、次のコードが必要でした。
std::cout << s.c_str() << std::endl;
別の回避策は、プロジェクトのプロパティに移動することです-&gt;一般-&gt;文字セット]を選択し、[Ues Multi-Byte Character Set]を選択します。 (文字列を出力するためにc_str()を使用する必要はありません)
MBCSを使用することには不利な点があるため、ソフトウェアをローカライズする予定がある場合は、これに反対します。