与结构sockaddr_in调用不匹配

No match for call to struct sockaddr_in

本文关键字:调用 不匹配 in 结构 sockaddr      更新时间:2023-10-16

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

我有一个客户端sockaddr_in结构:

struct sockaddr_in cli_data;

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

我像这样声明向量:

std::vector<sockaddr_in> cli_addrlist;

然后,我正在检查最近连接的地址是否存在,如果不存在 - 我正在push_back - 将cli_data的内容添加到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. }

我从 g++ 得到的错误是:

error: no match for call to ‘(sockaddr_in) ()’

这是第 13 行。

我可能错过了一些非常简单的东西,但我似乎没有解决这个问题。

提前谢谢。

由于cli_data是一个变量,因此您需要以这种方式使用它:

cli_addrlist.push_back(cli_data); // No parenthesis 

这个

cli_addrlist.push_back(cli_data());

应该是

cli_addrlist.push_back(cli_data);

另外,请确保此结构适合推送到向量。就像,如果它有指针成员作为其数据成员,那么它应该有与之对应的复制构造函数/赋值运算符。