簡體   English   中英

沒有匹配調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM