ошибка C2679: двоичный файл «>>»: не найден оператор, который принимает правый операнд типа «std :: string» (или нет приемлемого преобразования) - PullRequest
28 голосов
/ 27 октября 2009

Пожалуйста, не путайте с заголовком, так как он уже был задан кем-то, но для другого контекста

Приведенный ниже код в компиляторе Visual C ++ (VS2008) не компилируется, а выдает это исключение:

std::ifstream input (fileName);   

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

Но этот код прекрасно компилируется в Cygwin G ++. Есть мысли?

Ответы [ 4 ]

82 голосов
/ 27 октября 2009

Вы включили все следующие заголовки?

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

Полагаю, вы забыли <string>.

На заметку: Это должно быть std::cout и std::endl.

2 голосов
/ 09 марта 2018

Добавление к @ sbi ответа, в моем случае разница включала <string> вместо <string.h> (по VS 2017).

См. Следующий ответ: аналогичный случай ответа

0 голосов
/ 24 октября 2018

В дополнение к тому, что говорили другие. Следующий код был необходим в моем приложении для успешной компиляции.

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

Еще один обходной путь: перейдите в свойства проекта -> Общие -> Набор символов и выберите «Многобайтовый набор символов Ues» (вам не нужно использовать c_str () для вывода строки)

Есть недостатки в использовании MBCS, поэтому, если вы планируете локализовать свое программное обеспечение, я бы посоветовал против этого.

0 голосов
/ 30 августа 2018

include <string>

Попробуйте включить файл заголовка строки вместе с файлом <iostream>. Он будет работать в некоторых компиляторах даже без <string>, потому что настройки для разных компиляторов различны, и именно компилятор отвечает за чтение файлов препроцессора, которые начинаются с символа «#» для генерации файла obj.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...