#include <iostream> gives error using -std=c++11
我在Windows上使用gcc编译器和mingw。版本为4.9.3。下面的代码给出了当STD=C++ 98、-STD=C++ 03或-STD= C++ 11时的错误。
1 2 3 4 5 6 7 | #include <iostream> int main() { std::cout <<"Hello world!" << std::endl; return 0; } |
当使用-std=gnu++98、-std=gnu++03或std=gnu++11作为参数时,代码编译时不会出错。此外,在使用没有C++版本参数(G++Test.CPP-C)时,代码编译时没有错误。
在进一步的调查中,我发现这包括引起问题的因素。当使用任何STD= C++参数时,此代码不会产生错误:
1 2 3 4 | int main() { return 0; } |
但是,在查找要包括的其他内容以测试我的代码时,以下内容有效:
1 2 3 4 5 | #include <cmath> int main() { return 0; } |
但这并不是:
1 2 3 4 5 | #include <string> int main() { return 0; } |
发生什么事?从对GNU++的简短搜索中可以看出,它提供了额外的扩展,但是像上面这样简单的代码肯定不应该依赖于任何扩展?
我粘贴了用G++Test.CPP-C-STD= C++ 11编译第一段代码时出现的大错误。网址:http://pastebin.com/k0rltwqz
第一条消息是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ g++ test.cpp -c -std=c++11 In file included from c:\mingw\include\wchar.h:208:0, from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\cwchar:44, from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\bits\postypes.h:40, from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\iosfwd:40, from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\ios:38, from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\ostream:38, from c:\mingw\lib\gcc\mingw32\4.9.3\include\c++\iostream:39, from test.cpp:1: c:\mingw\include\sys/stat.h:173:14: error: '_dev_t' does not name a type struct _stat __struct_stat_defined( _off_t, time_t ); ^ c:\mingw\include\sys/stat.h:173:14: error: '_ino_t' does not name a type struct _stat __struct_stat_defined( _off_t, time_t ); ^ … |
通过更改为mingw64(它也使用较新版本的gcc)解决。似乎问题出在我的mingw32安装或者发行版上(如jonathan leffler所指出的)。所有的STD= C++XX参数现在都起作用了。