C++ 中对结构sockaddr\u的调用不匹配

C++ 中对结构sockaddr\u的调用不匹配,c++,vector,struct,C++,Vector,Struct,我正在尝试存储每个UDP服务器连接的地址信息 我在客户端的结构中有一个sockaddr\u: cli_数据中的结构sockaddr_ 我的目标是在每次新客户机连接到结构向量时存储此结构,并在以后使用向量的每个元素以及相应的结构元素 我这样声明向量: std::vector cli\u addrlist 然后,我将检查最近连接的地址是否存在,如果不存在,则将cli数据的内容推回到cli addrlist结构。这是通过以下代码行完成的: 1. bool exists = false; 2. whil

我正在尝试存储每个UDP服务器连接的地址信息

我在客户端的结构中有一个sockaddr\u:

cli_数据中的结构sockaddr_

我的目标是在每次新客户机连接到结构向量时存储此结构,并在以后使用向量的每个元素以及相应的结构元素

我这样声明向量:

std::vector cli\u addrlist

然后,我将检查最近连接的地址是否存在,如果不存在,则将cli数据的内容推回到cli addrlist结构。这是通过以下代码行完成的:

1. bool exists = false;
2. while ((n = recvfrom(s, buf, BUF_SIZE, 0, (struct sockaddr *) &cli_data, &len)) != -1) 
3. {
4.    for (int i = 0; i < cli_addrlist.size(); ++i)
5.    {
6.        if (inet_ntoa(cli_addrlist[i].sin_addr) == inet_ntoa(cli_data.sin_addr))
7.        {
8.            exists = true;
9.        }
10.    }
11.    if (exists == false)
12.    {
13.        cli_addrlist.push_back(cli_data());
14.    }      
15. }
1。bool exists=false;
2.而((n=recvfrom(s,buf,buf_SIZE,0,(struct sockaddr*)和cli_data,&len))!=-1)
3.{
4.对于(int i=0;i
我从g++得到的错误是:

错误:对“(sockaddr_in)()的调用不匹配。

那是13号线

我可能错过了一些非常简单的事情,但我似乎没有意识到这个问题


提前感谢。

由于
cli\u data
是一个变量,您需要这样使用它:

cli_addrlist.push_back(cli_data); // No parenthesis 
这个

cli_addrlist.push_back(cli_data());
应该是

cli_addrlist.push_back(cli_data);

此外,请确保此结构适合推入向量。比如,如果它有指针成员作为数据成员,那么它应该有相应的复制构造函数/赋值运算符。

@Ajay,我现在编辑了这个问题-我的错误,我重命名了变量以使其更容易理解,但没有更改此变量。谢谢。它就像一个符咒。我也会考虑建议,即使我的结构没有指针成员: