#include <iostream>使用-std = c ++ 11给出错误

时间:2016-08-10 17:02:24

标签: c++ gcc mingw

我正在使用带有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 );
              ^
…

1 个答案:

答案 0 :(得分:0)

通过更改为mingw64(也使用更新版本的gcc)解决。似乎问题在于我的mingw32安装或分发(正如Jonathan Leffler所指出的那样)。 所有-std = c ++ xx参数现在都可以使用。