传递迭代器值而不是引用函数

Posted

技术标签:

【中文标题】传递迭代器值而不是引用函数【英文标题】:Passing iterator value rather than reference to function 【发布时间】:2013-09-25 13:00:02 【问题描述】:

我正在尝试将迭代器中的结构传递给使用“.”操作符访问结构的函数。我试图理解传递值、指针和地址的区别,但我无法弄清楚这一点。

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

编译器错误:

server-iterative.cpp:222:109:错误:初始化无效 从类型的表达式中引用类型“const ConnectionData&” ‘连接数据*’ server-iterative.cpp:134:13: error: in pass 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;

【问题讨论】:

让它is_invalid_connection(*it);。你已经用这种方式打电话给process_client_recv,这似乎并不让你感到惊讶。 误解了我得到的编译器错误。谢谢。 【参考方案1】:

点赞bool test = is_invalid_connection(*it);

itConnectionData(在向量中)的迭代器,因此 *it 是数据本身。

【讨论】:

以上是关于传递迭代器值而不是引用函数的主要内容,如果未能解决你的问题,请参考以下文章

在 EventHandler 中使用 foreach 迭代器值 [重复]

如何将字符串迭代器值添加到 ArrayAdapter?

为啥 g++ 需要 -fpermissive 标志来在 c++ 中打印迭代器值? [关闭]

如何遍历包含小于迭代器值的数组

用 std::min 将迭代器值钳位到 end()

通过引用传递 C++ 迭代器有啥问题?