错误C2679:二进制“>>”:没有操作员发现这需要类型的右边的操作数“的std ::

2019-09-01 14:03发布

请不要在标题混淆,因为它已经由某人但对于不同的环境要求

下面的代码在Visual C ++编译器(VS2008)不会被编译,而是抛出此异常:

std::ifstream input (fileName);   

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

但是这个代码编译Cygwin中G ++罚款。 有什么想法吗?

Answer 1:

你已经囊括了所有的下列头?

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

我的猜测是,你忘了<string>

在一个侧面说明:这应该是std::coutstd::endl



Answer 2:

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

请参阅下面的回答: 类似情况下的答案



Answer 3:

include <string>

尝试包括与沿着串标头文件<iostream>文件。 它会在某些编译工作,即使没有<string> ,因为不同的编译器的设置是不同的,它是负责读取以“#”符号开始产生一个OBJ文件预处理文件编译器。



Answer 4:

除了其他人说什么。 下面的代码是必要的,我的应用程序成功地编译。

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

另一种变通到这是去项目属性 - >常规 - >字符集,然后选择“UES多字节字符集”(你将不再需要使用c_str()输出字符串)

有缺点使用MBCS所以如果你打算本地化您的软件,我advize反对这一点。



文章来源: error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)