ошибка при инициализации потока строк - PullRequest
0 голосов
/ 07 апреля 2011

Я не понимаю, почему я получил это сообщение об ошибке в строке "if (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;
}

Ответы [ 2 ]

4 голосов
/ 07 апреля 2011

Непонятно, как создается это сообщение, но stringstream не копируется. Вам следует перейти по ссылке и скопировать из нее данные, если вы не хотите передавать stringstream, но не изменяете его.

Однако, как правило, вы вообще не должны пропускать stringstream. Если целью является передача строки в функцию, используйте string. Если целью является обработка потока как потока, используйте istream & или ostream & или iostream &. Вы все еще можете пройти тот же stringstream из-за полиморфизма.

Я не совсем уверен, что вы здесь делаете, но изменение stringstream на iostream & должно исправить непосредственную проблему и возможные более поздние проблемы.

1 голос
/ 07 апреля 2011

Вы не можете скопировать stringstream, попробуйте передать его по ссылке:

int sentToGroup(int sender_fd, stringstream& str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...