2017-07-18 8 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

あなたはこのような場合のためにあなたが

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

に機能を変更する必要がありますし、

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

のように引数を渡し、(wSignalに)言及はなく、ポインタなどのパラメータを宣言していますポインタを使用する場合は、パラメータタイプをポインタ(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の参照が許可されていないため、2番目の方法のみが機能します。

0

DoesPeriodExist()の定義には、ポインタはありませんが、wSignalへの参照が必要です。正しい署名は、このように実装におけるベースオペランドが.演算子と共に使用されるポインタが、参照、ない

bool DoesPeriodExist(wSignal* s) 

あろう。

関連する問題