出错初始化字符串流
我不明白为什么我在行此错误消息 “如果(sentToGroup(client_fd,SS)== -1){” 在运行下面的代码:出错初始化字符串流
stringstream ss;
// ss.get();
ss << "test";
if (sentToGroup(client_fd, ss) == -1){
perror("Fail sending to group");
}
我得到了下面的错误信息,为什么?
Initializing argument 2 of ‘int sentToGroup(int, std::stringstream)’
的sentToGroup功能如下:
int sentToGroup(int sender_fd, stringstream str){
char buffer[MAX];
stringstream sender;
sender << int(sender_fd) << "> " << str;
int bytes = recv(sender_fd, buffer, sizeof(buffer), 0);
for (int c = printerCnt; c < sizeof(printer); c++){
if (printer[c] != sender_fd){
if (send(printer[c], sender, bytes, 0) == -1){
return -1;
}
}
}
return 0;
}
您不能复制stringstream
,尝试通过引用传递它:
int sentToGroup(int sender_fd, stringstream& str)
目前尚不清楚该消息是如何产生的,但stringstream
不可复制。如果您不希望通过stringstream
但不对其进行修改,则应通过引用并复制数据。
但是,您通常不应该通过stringstream
。如果目的是将字符串传递到函数中,请使用string
。如果目的是将其视为流,请使用istream &
或ostream &
或iostream &
。由于多态性,您仍然可以通过相同的stringstream
。
我不太确定你在这里做什么,但将stringstream
更改为iostream &
应该可以解决眼前的问题和可能的后续问题。
不通过stringstream引用的具体原因是什么?只是出于好奇 – mukeshkumar 2011-04-07 10:22:28
@hype:使用基类允许使用其他类型的流。除了在构建时使用特定的'streambuf'外''stringstream'基本上不提供'iostream'之外的特性,因此需要更多的派生类是无意义的限制。 – Potatoswatter 2011-04-07 10:27:36
alrite谢谢.. – mukeshkumar 2011-04-07 11:36:10
尝试将sentToGroup的原型更改为int sentToGroup(int sender_fd,stringstream&str) – mukeshkumar 2011-04-07 10:18:54