![](/img/trans.png)
[英]Socket programming: Struct sockaddr VS struct sockaddr_in
[英]No match for call to struct sockaddr_in
我正在嘗試存儲到UDP服務器的每個連接的地址信息。
我為客戶端有一個sockaddr_in結構:
struct sockaddr_in cli_data;
我的目標是每次將新客戶端連接到結構的向量中時都存儲此結構,並稍后使用該向量的每個元素以及每個相應的struct元素。
我在聲明這樣的向量:
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);
另外,請確保此結構適合推入向量。 就像,如果它具有指針成員作為其數據成員,則它應該具有與之對應的復制構造函數/賦值運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.