关于c ++:#include 使用-std = c ++ 11给出错误

#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参数现在都起作用了。