タイトルは別のコンテキストではなく、誰かから既に求められているので混同しないでください
Visual C++コンパイラ(VS2008)の次のコードはコンパイルされず、代わりにこの例外がスローされます。
std::ifstream input (fileName);
while (input) {
string s;
input >> s;
std::cout << s << std::endl;
};
ただし、このコードはcygwin g ++で正常にコンパイルされます。何かご意見は?
次のヘッダーをすべて含めましたか?
<fstream>
<istream>
<iostream>
<string>
私の推測では、<string>
を忘れたのでしょう。
補足説明:std::cout
およびstd::endl
である必要があります。
@ sbi答えに追加すると、私の場合は<string>
の代わりに <string.h>
(VS 2017の下)。
次の回答を参照してください。 類似ケース回答
他の人が言ったことに加えて。アプリケーションを正常にコンパイルするには、次のコードが必要でした。
std::cout << s.c_str() << std::endl;
これに対する別の回避策は、プロジェクトのプロパティ->一般->文字セットに移動し、「Ues Multi-Byte Character Set」を選択することです(文字列を出力するためにc_str()を使用する必要はありません)
MBCSを使用することには不利な点があるため、ソフトウェアをローカライズする予定がある場合は、これに反対します。
include <string>
<iostream>
ファイルとともに文字列ヘッダーファイルを含めてみてください。 <string>
がなくても一部のコンパイラで動作します。これは、異なるコンパイラの設定が異なり、 '#'記号で始まるプリプロセッサファイルを読み取ってobjファイルを生成するのはコンパイラであるためです。