代码之家  ›  专栏  ›  技术社区  ›  asyncwait

错误C2679:二进制“>>”:找不到接受“std::string”类型右侧操作数的运算符(或没有可接受的转换)

  •  27
  • asyncwait  · 技术社区  · 15 年前

    请不要与标题混淆,因为已经有人问过了,但上下文不同。

    VisualC++编译器下面的代码(VS2008)没有编译,而是抛出这个异常:

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

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

    4 回复  |  直到 6 年前
        1
  •  75
  •   sbi    9 年前

    是否包含以下所有标题?

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

    我猜你忘了 <字符串> .

    旁注:应该是 std::cout std::endl .

        2
  •  2
  •   Lightness Races in Orbit    6 年前

    添加到 @ SBI 答案,在我的例子中,区别包括 <string> 而不是 <string.h> (与2017年相比)。

    请参阅以下答案: similar case answer

        3
  •  0
  •   Akshat Bhatt    6 年前

    include <string>

    尝试将字符串头文件与 <iostream> 文件。 即使没有 <string> 因为不同编译器的设置是不同的,所以由编译器负责读取以“”符号开头的预处理器文件以生成obj文件。

        4
  •  0
  •   Nick Delbar    6 年前

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

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

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

    使用MBC有缺点,所以如果你打算本地化你的软件,我建议你不要这样做。