请不要与标题混淆,因为有人已经问过这个标题,但不同的背景
Visual C ++编译器(VS2008)中的以下代码未编译,而是抛出此异常:
std::ifstream input (fileName);
while (input) {
string s;
input >> s;
std::cout << s << std::endl;
};
但是这个代码在cygwin g ++中编译得很好。有什么想法吗?
答案 0 :(得分:80)
您是否包含以下所有标题?
<fstream>
<istream>
<iostream>
<string>
我的猜测是你忘了<string>
。
旁注:应该是std::cout
和std::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有一些弊端,因此,如果您打算对软件进行本地化,则不建议这样做。