【问题标题】: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,这似乎并不让你感到惊讶。
  • 误解了我得到的编译器错误。谢谢。

标签: c++ iterator


【解决方案1】:

点赞bool test = is_invalid_connection(*it);

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

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    相关资源
    最近更新 更多