2011-04-07 95 views
0

我不明白为什么我在行此错误消息 “如果(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; 
} 
+0

尝试将sentToGroup的原型更改为int sentToGroup(int sender_fd,stringstream&str) – mukeshkumar 2011-04-07 10:18:54

回答

1

您不能复制stringstream,尝试通过引用传递它:

int sentToGroup(int sender_fd, stringstream& str) 
4

目前尚不清楚该消息是如何产生的,但stringstream不可复制。如果您不希望通过stringstream但不对其进行修改,则应通过引用并复制数据。

但是,您通常不应该通过stringstream。如果目的是将字符串传递到函数中,请使用string。如果目的是将其视为流,请使用istream &ostream &iostream &。由于多态性,您仍然可以通过相同的stringstream

我不太确定你在这里做什么,但将stringstream更改为iostream &应该可以解决眼前的问题和可能的后续问题。

+0

不通过stringstream引用的具体原因是什么?只是出于好奇 – mukeshkumar 2011-04-07 10:22:28

+1

@hype:使用基类允许使用其他类型的流。除了在构建时使用特定的'streambuf'外''stringstream'基本上不提供'iostream'之外的特性,因此需要更多的派生类是无意义的限制。 – Potatoswatter 2011-04-07 10:27:36

+0

alrite谢谢.. – mukeshkumar 2011-04-07 11:36:10