错误:在使用gcc 4.8.2在命令行中编译时,'to_string'不是'std'的成员,在NetBeans中有效吗?

时间:2015-05-20 15:48:03

标签: c++ c++11 netbeans googletest g++4.8

我正在使用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

按照Google测试文档中的说明进行操作。

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

我正在使用Ubuntu 14.04并且我已经尝试更新g ++(但不是更高版本),我也尝试使用-std=c++11而不是-std=c++0x来指定版本。

在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的学生必须可以使用这个系统,实际上它不应该是他们不能使用所有的功能应该得到支持。

1 个答案:

答案 0 :(得分:0)

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

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

-isystem标志后面应该是一个包含您希望gcc视为system headers的标头的路径。因此-std=c++0x标志正在错误地使用-isystem标志。您可能希望命令行为

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