我正在使用带有MinGW的Windows上的gcc编译器。版本是4.9.3。 当-std = c ++ 98,-std = c ++ 03或-std = c ++ 11用作参数时,以下代码会出错。
#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)
时,代码编译时没有错误在进一步调查中,我发现是#include导致问题。 使用任何std = c ++参数时,此代码不会产生错误:
int main()
{
return 0;
}
但是,在查找要包含的其他内容以测试我的代码时,以下工作:
#include <cmath>
int main()
{
return 0;
}
但这不是:
#include <string>
int main()
{
return 0;
}
发生了什么事?从对gnu ++的简短搜索来看,它说它提供了额外的扩展,但代码就像上面的代码一样简单,不应该依赖于任何扩展?
我已经粘贴了用g ++ test.cpp -c -std = c ++ 11编译第一段代码时出现的大错误。 http://pastebin.com/k0RLtWQz
第一条消息是:
$ 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 );
^
…
答案 0 :(得分:0)
通过更改为mingw64(也使用更新版本的gcc)解决。似乎问题在于我的mingw32安装或分发(正如Jonathan Leffler所指出的那样)。 所有-std = c ++ xx参数现在都可以使用。