下面是我的功能:
string Employee::get_print(void) {
string out_string;
stringstream ss;
ss << e_id << " " << type << endl;
out_string = ss.str();
return out_string;
}
e_id
和type
是int
,它们包含Employee类的值。但是当我将它们传递给字符串流时,他们只是在我尝试将其放入时清除字符串。但是,如果int
中的ss << "Some text" << endl;
此输出没有问题。我做错了什么= S
//修改
确定; 这是调用代码:
tmp = cur->get_print();
其中tmp是一个字符串,cur是一个Employee对象。
此代码......
stringstream out;
out << "Test " << e_id << " " << e_type;
return out.str();
重演“测试”而没有别的。如果我取出"Test " <<
我的返回字符串是“”
我在Mac OS / X 10.6.2上使用GCC 4.2,如果这有任何区别的话。
答案 0 :(得分:1)
我也无法重现此错误。如前所述,不要包含endl
,因为它实际上附加了\n
并且应该刷新写缓冲区。对于这种用途,它是完全没必要的,实际上可能导致不良结果......但是,编辑/更新中的代码对我来说效果很好。
int main(int argc, char* argv[])
{
int e_id = 5;
int e_type = 123456;
stringstream out;
out << "Test " << e_id << " " << e_type;
cout << out.str();
return 0;
}
产地:
Test 5 123456
我的建议是仔细检查e_id
和e_type
是否真的只是原生int
。
对于进一步测试,您可能希望强制对值进行强制转换以查看它是否有帮助:
out << "Test " << (int)e_id << " " << (int)e_type;
由于我无法重现此错误,我担心我无法继续提供帮助。但祝你好运!
答案 1 :(得分:1)
好的我不知道stringstream
发生了什么事情我已经尝试在我的代码的其他部分使用它,它不适用于整数。因此,我已恢复使用sprintf
C函数:
string Employee::get_print(void) {
char out[50];
sprintf(out, "%d %d", e_id, e_type);
string output = out;
return output;
}
返回所需的字符串。
答案 2 :(得分:1)
我已经进入了Netbeans,我没有这个问题。所以这是Xcode的一个问题。
答案 3 :(得分:0)
我认为不需要endl。如果你想在std :: cout上的文件上写一个换行符,你只需要编写endl。
由于你编写了endl,你的stringstream将包含一个包含2行的字符串,其中第二行是空的。这可能会让你感到困惑。删除endl只获得一行。
答案 4 :(得分:0)
我有完全相同的问题 - GCC和stringstream什么也没有返回。
正如我发现的那样,诀窍是你必须先将一些文本数据放到stringstream中。
此代码......
stringstream ss(stringstream::out);
ss << 3.14159;
cout << "'" << ss.str() << "'" << endl;
获得这个结果:
''
但是如果我们先在字符串流中放入一个""
......
stringstream ss(stringstream::out);
ss << "" << 3.14159;
cout << "'" << ss.str() << "'" << endl;
结果如预期:
'3.14159'