web-dev-qa-db-ja.com

エラーC2679:バイナリ「>>」:タイプ「std :: string」の右側のオペランドをとる演算子が見つかりません(または、受け入れ可能な変換がありません)

タイトルは別のコンテキストではなく、誰かから既に求められているので混同しないでください

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

std::ifstream input (fileName);   

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

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

28
asyncwait

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

  • <fstream>
  • <istream>
  • <iostream>
  • <string>

私の推測では、<string>を忘れたのでしょう。

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

84
sbi

@ sbi答えに追加すると、私の場合は<string> の代わりに <string.h>(VS 2017の下)。

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

2
Guy Avraham

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

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

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

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

0
Nick Delbar

include <string>

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

0
Akshat Bhatt