#include <iostream>
#include <sstream>
template <typename T>
const char* numberToString(T number) {
std::ostringstream ss;
ss << number;
return ss.c_str();
}
int main() {
printf(numberToString(123));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的错误:
1>d:\programming\euler\problem 4\problem 4\problem 4\source.cpp(8): error C2039: 'c_str' : is not a member of 'std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char>>'
1> d:\programming\euler\problem 4\problem 4\problem 4\source.cpp(26) : see reference to function template instantiation 'const char *numberToString<int>(T)' being compiled
1> with
1> [
1> T=int
1> ]
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
c_str是的成员std::string,而不是ostringstream.如果您想要string从流中获取,请使用str().但请注意,const char*从中返回a string是错误的 - string在您使用之前,遗嘱将超出范围const char*.因此,让你的函数返回一个string(或者让它得到一个缓冲区来写):
template <typename T>
std::string numberToString(T number) {
std::ostringstream ss;
ss << number;
return ss.str();
}
Run Code Online (Sandbox Code Playgroud)