0

嗨,下面是我的功能:

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但是如果我在这个输出中没有 ass << "Some text" << endl;就好了。我做错了什么=S

//编辑

好的; 这是调用代码:

tmp = cur->get_print();

其中 tmp 是一个字符串,cur 是一个员工对象。

这段代码...

stringstream out; 
out << "Test " << e_id << " " << e_type; 
return out.str(); 

重新运行“测试”,仅此而已。如果我取出"Test " <<我返回的字符串是“”

如果这有什么不同,我在 Mac OS/X 10.6.2 上使用 GCC 4.2。

4

5 回答 5

1

我已经搬进了 Netbeans,我没有这个问题。所以这是 Xcode 的问题。

于 2010-03-19T22:46:02.387 回答
1

我也无法重现此错误。如前所述,不要包括endl, 因为这实际上附加了 a\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;
}

产生:

测试 5 123456

我的建议是仔细检查,e_id并且e_type真的只是原生的int

为了进一步测试,您可能希望强制对这些值进行强制转换,以查看它是否有帮助:

out << "Test " << (int)e_id << " " << (int)e_type;

由于我无法重现此错误,恐怕我无法提供任何进一步的帮助。但祝你好运!

于 2010-03-19T19:11:32.487 回答
1

好的,我不知道发生了什么stringstream我尝试在代码的其他部分使用它,但它不适用于整数。因此,我已恢复使用sprintfC 函数:

string Employee::get_print(void) {

   char out[50];

   sprintf(out, "%d %d", e_id, e_type);

   string output = out;

   return output;
} 

这将返回所需的字符串。

于 2010-03-19T21:19:22.167 回答
0

我认为不需要endl。如果你想在 std::cout 上的文件上写换行符,你只需要写 endl。

由于您编写了 endl,因此您的 stringstream 将包含一个包含 2 行的字符串,其中第二行为空。这可能会让你感到困惑。删除 endl 只得到一行。

于 2010-03-19T16:15:40.273 回答
0

我遇到了完全相同的问题 - GCC 和 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'
于 2013-11-19T20:56:06.033 回答