我正在尝试将迭代器中的结构传递给使用“.”运算符访问结构的函数。我正在努力思考传递值、指针和地址的区别,但我就是想不通这一点。
下面是编译器的错误和产生错误的代码。
编译器错误:
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;
}
最佳答案
像这样 bool test = is_invalid_connection(*it);
it
是 ConnectionData
的迭代器(在 vector 中),所以 *it
是数据本身。
关于c++ - 传递迭代器值而不是对函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19005664/