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

时间:2009-10-27 14:49:11

标签: c++ visual-c++ compiler-errors cygwin

请不要与标题混淆,因为有人已经问过这个标题,但不同的背景

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

std::ifstream input (fileName);   

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

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

4 个答案:

答案 0 :(得分:80)

您是否包含以下所有标题?

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

我的猜测是你忘了<string>

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

答案 1 :(得分:2)

添加到 @sbi 答案,在我的情况下,差异包括<string>而不是<string.h>(在VS 2017下)。

请参阅以下答案:similar case answer

答案 2 :(得分:0)

include <string>

尝试包括字符串头文件和<iostream>文件。 即使没有<string>,它也可以在某些编译器中工作,因为不同编译器的设置不同,并且由编译器负责读取以'#'符号开头的预处理器文件以生成obj文件。

答案 3 :(得分:0)

除了别人所说的。以下代码对于我的应用程序来说是成功编译所必需的。

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

另一种解决方法是转到项目属性->常规->字符集,然后选择“使用多字节字符集”(您无需使用c_str()来输出字符串)

使用MBCS有一些弊端,因此,如果您打算对软件进行本地化,则不建议这样做。