我正在做一个小的词汇记忆程序,其中的单词会随机地闪现在我的意思。正如Bjarne Stroustroup告诉我们的那样,我想使用标准c++库,但我刚开始就遇到了一个看似奇怪的问题。

我想改变一个长整数为std::字符串,以便能够将它存储在文件中。我已经使用to_string()同样。问题是,当我用g++(版本4.7.0中提到的-‍版本标志)编译它时,它说:

PS C:\Users\Anurag\SkyDrive\College\Programs> g++ -std=c++0x ttd.cpp
ttd.cpp: In function 'int main()':
ttd.cpp:11:2: error: 'to_string' is not a member of 'std'

给出这个错误的程序是:

#include <string>

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

但是,我知道它不可能,因为msdn库清楚地说它存在,并且之前关于Stack Overflow(对于g++版本4.5)的一个问题说它可以用-std=c++0x标志打开。我做错了什么?


当前回答

对我来说,确保我有:

#include <iostream>  
#include<string>  
using namespace std;

在我的文件中做了一些类似to_string(12345)的工作。

其他回答

这是MinGW下的一个已知bug。Bugzilla相关。在评论区,你可以获得一个补丁,使它与MinGW一起工作。

此问题已在MinGW-w64项目提供的高于GCC 4.8.0的发行版中修复。尽管名称如此,该项目提供了32位和64位的工具链。Nuwen MinGW发行版也解决了这个问题。

对我来说,确保我有:

#include <iostream>  
#include<string>  
using namespace std;

在我的文件中做了一些类似to_string(12345)的工作。

在代码块设置->编译器设置->编译器标志->选择STD c++11完成。 我也有同样的问题……现在起作用了!

对于那些想知道为什么在Android上发生这种情况的人来说,这可能是因为你使用了错误的c++标准库。尝试在构建中更改c++库。gradle从gnustl_static到c++_static, c++标准在你的CMakeLists.txt从-std=gnu++11到-std=c++11

正如建议的那样,这可能是编译器版本的问题。

尝试使用以下代码将long转换为std::string:

#include <sstream>
#include <string>
#include <iostream>

int main() {
    std::ostringstream ss;
    long num = 123456;
    ss << num;
    std::cout << ss.str() << std::endl;
}