c++ - 传递迭代器值而不是对函数的引用

标签 c++ iterator

我正在尝试将迭代器中的结构传递给使用“.”运算符访问结构的函数。我正在努力思考传递值、指针和地址的区别,但我就是想不通这一点。

下面是编译器的错误和产生错误的代码。

编译器错误:

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);

itConnectionData 的迭代器(在 vector 中),所以 *it 是数据本身。

关于c++ - 传递迭代器值而不是对函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19005664/

相关文章:

python - 当子列表的顺序无关紧要时,从列表列表中获取唯一元素

C++:按变量值而不是数字移位 ->有什么区别?

c++ - 如何使用迭代器和 lambda 函数计算标准差

jquery - 如何删除 jQuery 选择的最后一个元素?

python - 在所有其他部分完全运行后是否可以运行变形器部分?

javascript - 如何在 JavaScript 中创建计数生成器/迭代器级联?

python ctypes C++ 取回 char* 在 linux 上缺少最后一个字符

c++ - 网格表示 - 一个顶点(空间位置)= 一个位置,tex 坐标,法线?

C++17:元组解包时只保留一些成员

c++ - 中间值和线程安全