2017-07-18 54 views
0

我正在試圖給我們一個指向C++結構的指針。我使用成員MAC來構造wSignal。我將一個結構體的指針賦給函數。C++使用指針指向函數中的結構

定義的結構:

struct wSignal 
{ 
    std::string MAC; 
}; 

使用功能:

bool DoesPeriodExist (wSignal& s) 
{ 
    if(it1->MAC != "") 
} 

錯誤,我得到:該功能的

wSignal it1 = {"22:44:66:AA:BB:CC"}; 
DoesPeriodExist(&it1); 

定義

error: base operand of ‘->’ has non-pointer type ‘wSignal’ 

我做錯了什麼?我怎樣才能使用指針?對不起,如果這是一個愚蠢的問題。我對指針不是很熟悉,而是在嘗試理解這個概念。

+0

用'DoesPeriodExist調用它(IT1);';該參考已經在函數參數的定義中。 –

+0

'wSignal&'指定一個引用類型,而不是指針 – StoryTeller

+0

指向'struct wSignal'的指針是'wSignal * s'。 – Scheff

回答

4

你聲明參數作爲參考(以wSignal),而不是一個指針,這種情況下,你應該將功能改成

bool DoesPeriodExist (wSignal& s) 
{ 
    if(s.MAC != "") ... 
} 

和傳遞參數一樣

wSignal it1 = {"22:44:66:AA:BB:CC"}; 
DoesPeriodExist(it1); 

如果你想要去的指針,那麼參數類型應改爲指針(以wSignal

bool DoesPeriodExist (wSignal* s) 
{ 
    if(s->MAC != "") 
} 

,並通過像你的代碼的參數顯示

wSignal it1 = {"22:44:66:AA:BB:CC"}; 
DoesPeriodExist(&it1); 
1

你給一個指針struct給需要一個參考struct功能。

這是一個需要修復的不匹配:

  • 您可以通過struct本身,DoesPeriodExist(it1),或
  • 您可以接受一個指針,bool DoesPeriodExist (wSignal* s)

第一種方法是在wSignal必須非空的情況下更可取。如果您希望允許通過NULLDoesPeriodExist,則只有第二種方法可行,因爲NULL引用是不允許的。

0

你的DoesPeriodExist()定義並不指望一個指針,但到wSignal參考。正確的簽名會

bool DoesPeriodExist(wSignal* s) 

因此,在您的實現基本操作數不是指針,但一個參考,這是用來與.運營商。