我正在做一个小的词汇记忆程序,其中的单词会随机地闪现在我的意思。正如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标志打开。我做错了什么?
如果我们使用模板光解决方案(如上所示),如下所示:
namespace std {
template<typename T>
std::string to_string(const T &n) {
std::ostringstream s;
s << n;
return s.str();
}
}
不幸的是,我们在某些情况下会遇到问题。例如,对于静态const成员:
hpp
class A
{
public:
static const std::size_t x = 10;
A();
};
cpp
A::A()
{
std::cout << std::to_string(x);
}
和链接:
CMakeFiles/untitled2.dir/a.cpp.o:a.cpp:(.rdata$.refptr._ZN1A1xE[.refptr._ZN1A1xE]+0x0): undefined reference to `A::x'
collect2: error: ld returned 1 exit status
下面是解决这个问题的一个方法(添加到size_t类型中):
namespace std {
std::string to_string(size_t n) {
std::ostringstream s;
s << n;
return s.str();
}
}
HTH.