与结构sockaddr_in调用不匹配
No match for call to struct sockaddr_in
我正在尝试存储与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);
另外,请确保此结构适合推送到向量。就像,如果它有指针成员作为其数据成员,那么它应该有与之对应的复制构造函数/赋值运算符。
相关文章:
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- test1.cpp:9:77:错误:对"(const std::normal_distribution) <double>(std::mt19937&)"的调用不匹配
- 计算一个单词在映射中出现的次数 - 使用 transform() - 调用不匹配
- std::使用内部对象移动 - 与调用不匹配
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 错误:对'boost::.......'的调用不匹配
- 错误:对"set_union"的调用不匹配
- 与构造函数中对(类)(类型)的调用不匹配
- 对"(std::vector<std::vector<int> >) (int, std::vector<int>)"的调用不匹配
- 声明后初始化对象时"调用不匹配"
- 功能参数与函数调用不匹配
- C++ 与函数调用不匹配
- C++ 错误:对 '(std::string {aka std::basic_string}) (<char>无符号整数、字符)的调用不匹配
- C++错误:对"(RgbImage) (int&, int&)"的调用不匹配
- C++ 错误:对"(std::string) (const char[4])"的调用不匹配
- 与结构sockaddr_in调用不匹配
- 错误:对'(Time) (int, int, int)'的调用不匹配
- 错误消息:与调用"(cv::Rect) (cv::Mat&, cv::P oint_, cv:<int>:P oint, cv::Scalar, int)"的调用不匹配
- 对c++函数的调用不匹配
- const_iterator、find_if和bind2nd:对错误的调用不匹配