2013-09-25 4 views
0

Я пытаюсь передать мою структуру в итераторе в функцию, которая обращается к структуре с помощью оператора «.». Я пытаюсь склонить голову к различию передачи значений, указателей и адресов, и я просто не могу понять это.Передача значения итератора вместо ссылки на функцию

Ниже приведена ошибка от компилятора и кода, который генерирует ошибку.

Compiler ошибка:

server-iterative.cpp:222:109: error: invalid initialization of reference of type ‘const ConnectionData&’ from expression of type ‘ConnectionData*’ server-iterative.cpp:134:13: error: in passing argument 1 of ‘bool is_invalid_connection(const ConnectionData&)’

Код:

struct ConnectionData 
{ 
    EConnState state; 
    int sock; 
    size_t bufferOffset, bufferSize; 
    char buffer[kTransferBufferSize+1]; 
}; 

for(std::vector<ConnectionData>::iterator it = connections.begin(); it != connections.end(); ++it){ 
    if(FD_ISSET(it->sock, &rset)){ 
     if(process_client_recv(*it) == false){ 
      close(it->sock); 
      bool test = is_invalid_connection(&(*it)); 
     } 
    } 
} 

static bool is_invalid_connection(const ConnectionData& cd) 
{ 
    return cd.sock == -1; 
} 
+0

Сделать это 'is_invalid_connection (* it);'. Вы уже вызываете 'process_client_recv' таким образом, и это вас не удивляет. –

+0

неправильно интерпретировал ошибку компилятора, которую я получал. Благодарю. –

ответ

1

Как это bool test = is_invalid_connection(*it);

it итератор для ConnectionData (в векторе), так *it сами данные.

Смежные вопросы