错误C2679:二进制'>>':找不到哪个运算符采用'std :: string'类型的右手操作数(或者没有可接受的转换)

asy*_*ait 31 c++ cygwin compiler-errors visual-c++

请不要与标题混淆,因为它已被某人询问,但不同的背景

Visual C++编译器(VS2008)中的以下代码未编译,而是抛出此异常:

std::ifstream input (fileName);   

while (input) {
  string s;
  input >> s;
  std::cout << s << std::endl;
};
Run Code Online (Sandbox Code Playgroud)

但是这个代码在cygwin g ++中编译得很好.有什么想法吗?

sbi*_*sbi 90

你是否包括以下所有标题?

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

我的猜测是你忘记了<string>.

旁注:那应该是std::coutstd::endl.

  • @Vadi:很可能`std :: string`是在你已经包含的其他标题中定义的,但运算符不是.所以编译器接受`string s;`,但不接受stream运算符的调用. (7认同)
  • @Tahlil:C++标准没有指定标准库头可能包含或不包含哪些其他头,因此供应商可以随意做任何他们想做的事情.(由于包含大量内容在编译时间方面成本很高,有时它们会将标题拆分为不同标题中包含的不同部分.)因此,可能会发生您未包含的内容[定义或声明](http:// stackoverflow.com/a/1410632/140719)内部包含一些标头.这是否回答你的问题? (4认同)
  • 你是对的..我错过了<string>,你不认为这个错误信息完全是误导性的.我无法将此错误消息与您提到的修复相关联.很奇怪!! (2认同)