我有一个静态方法,应该返回下一个可用的id。其他类中的几个静态成员调用此函数,因此每个成员都会分配不同的id。但是,当我打印指定的值时,我不会得到“id0”,“id1”,而只是像“*”这样的符号。我正在使用此代码:
int A::i = 0; //static member
std::string A::id()
{
std::stringstream sst;
sst<< "id" << A::i;
i++;
return sst.str(); //i've tried to return a const char* too, but doesnt work either
}
//assigning id's in several classes like this:
const char* B::id = A::id().c_str();
const char* C::id = A::id().c_str();
//printing them in the main function:
std::cout << B::id << " " << C::id << "\n";
我不明白为什么上面的代码不起作用。当我执行以下代码时,将打印预期结果“id10”:
static std::string gt()
{
std::stringstream ss;
ss << "id" << 10;
return ss.str();
}
答案 0 :(得分:6)
看看
const char* C::id = A::id().c_str();
您正在创建一个新的id字符串,然后您获取一个指向其数据的指针(作为一个C字符串),然后在此之后,您指向的内容的临时字符串将被销毁。简单回答:要么坚持std::string
,要么坚持int
ids。