"to_string"不是"std"的成员?

47

好的,所以我有

tmp.cpp:

#include <string>

int main()
{
    std::to_string(0);
    return 0;
}

但是当我尝试编译时,会出现以下错误:

$ g++ tmp.cpp -o tmp
tmp.cpp: In function ‘int main()’:
tmp.cpp:5:5: error: ‘to_string’ is not a member of ‘std’
     std::to_string(0);
     ^

我正在使用 g++ 版本 4.8.1。与我找到的所有其他关于此错误的参考不同,我没有使用 MinGW,而是在 Linux(3.11.2)上。

这是为什么?这是标准行为吗?还是我做错了什么,或者有一个 bug?


3
用命令g++ -std=c++11 -o tmp tmp.cc进行编译时,出现错误:'to_string'不是'std'的成员。g++版本为4.8.2。这是一种退化现象吗? - M.M
嗯,不确定,但在我的g++ 4.9.0上可以工作。 - mueslo
2
使用gcc tdm-2 4.8.1版本,编译时使用'-std=c++11',仍然报错“to-string”不是std的成员。 - Brian Jack
2
我也一样。使用 arm-none-eabi-gcc -std=c++11 仍然出现错误。 - Alain1405
2个回答

53

您可能希望使用以下方式指定C++版本:

g++ -std=c++11 tmp.cpp -o tmp

我手头没有gcc 4.8.1,但在旧版本的GCC中,你可以使用

g++ -std=c++0x tmp.cpp -o tmp

我相信至少gcc 4.9.2也支持通过指定方式支持C++14的一部分

g++ -std=c++1y tmp.cpp -o tmp

更新: gcc 5.3.0(我正在使用的是cygwin版本)现在支持-std=c++14-std=c++17两种标准。


在 Debian 8 (Linux 3.14-2-amd64) 的 Eclipse CDT 中遇到了这个错误。在设置中指定 GCC C++ 编译器并运行命令 g++ -std=c++11 解决了我的问题! 谢谢! - eluong
1
当我使用-std=c++11编译时,在gcc --version tdm-2 4.8.1中仍然会出现错误。 - Brian Jack
3
我也遇到过这个问题,似乎在gcc的标准库(libstdc++)中并没有std::to_string函数,不过在LLVM/clang附带的libc++库中有。 - Max Raskin
你正在使用哪个版本的gcc?你也可以尝试使用-std=c++1y。 - CS Pei

25

to_string可以与最新的C++版本(如版本11)一起使用。对于旧版本,您可以尝试使用此函数。

#include <string>
#include <sstream>

template <typename T>
std::string ToString(T val)
{
    std::stringstream stream;
    stream << val;
    return stream.str();
}

通过添加模板,您可以使用任何数据类型。在此处,您必须包含#include<sstream>


使用std::ostringstream是否更加“安全”,因为我们只需要流的输出? - Bruno Bieri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接