Error: ‘to_string’ is not a member of ‘std’ when compiling in command line with gcc 4.8.2, works in NetBeans?

Error: ‘to_string’ is not a member of ‘std’ when compiling in command line with gcc 4.8.2, works in NetBeans?

我正在使用 GoogleTest (1.7.0) 测试我的代码。我必须在 NetBeans (8.0.2) 和直接从命令行编译测试。

NetBeans 按照此处的建议集成了 GoogleTest:https://youtu.be/TS2CTf11k1U。 我还使用软件包随附的说明从命令行(在不同的地方)构建了 GoogleTest。

有问题的代码行是(a 和 b 是双精度数):

std::string input = std::to_string(a) + " " + std::to_string(b);

在使用

编译时给出 error: ‘to_string’ is not a member of ‘std’
g++ -isystem -std=c++0x ~/gtest-1.7.0/include -pthread ~/Task1/test_source.cpp libgtest.a -o test_module1_1

按照 GoogleTest 文档中的说明。

奇怪的是,当使用来自 NetBeans 的 "Test" 时(如视频所示),测试编译并 运行 正确。

我正在使用 Ubuntu 14.04,我已经尝试更新 g++(虽然不是更高版本),我还尝试使用 -std=c++11 而不是 [=15] 指定版本=].

在 NetBeans 中可以看到此警告:

Library File /usr/include/c++/4.8/string
but there is an unresolved #include <stddef.h>
in included /usr/include/_G_config.h

我发现这可能是因为 multilib,我也尝试通过检查它是否已安装来修复它。这在编译期间并没有真正引起任何警告,所以可能只是 IDE 被混淆了。

但考虑到编译错误的真正问题: GoogleTest 框架、编译器或我的代码有问题吗?

PS。最好不要建议我不使用 to_string 因为这个系统必须可供学习 C++11 的学生使用,实际上不应该是他们不能使用所有应该支持的功能.

我认为你的问题是你将命令行参数传递给 gcc 的顺序

g++ -isystem -std=c++0x ~/gtest-1.7.0/include ...
    ^^^^^^^^^^^^^^^^^^^

-isystem 标志后面应该跟一个包含 headers 的路径,您希望 gcc 将其视为 system headers。所以 -std=c++0x 标志被 -isystem 标志错误地使用了。您可能希望命令行为

g++ -std=c++0x -isystem ~/gtest-1.7.0/include ...