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