2013-10-24 8 views
17

「明示的に基準部材を初期化しなければならない」のため、私はこのクラスにコンストラクタ「」

class CamFeed { 
public: 
    // constructor 
    CamFeed(ofVideoGrabber &cam); 
    ofVideoGrabber &cam; 

}; 

そして、このコンストラクタを持っている:

CamFeed::CamFeed(ofVideoGrabber &cam) { 
    this->cam = cam; 
} 

私は、コンストラクタでこのエラーを取得する: コンストラクタ 'の'参照メンバーを明示的に初期化する必要があります' '

これを回避するには良い方法はありますか?

+2

ptrのようにヌルにすることはできないため、参照をすぐに初期化する必要があります – aaronman

+6

このコード行が何を意味しているかを慎重に考えると、これはあなたの考えではありません: 'this-> cam = cam;'これは再ターゲットしません参照。まだ初期化されていない 'this-> cam'では' operator = 'を呼び出すでしょう。 –

答えて

29

あなたは、コンストラクタの初期化子リストを使用する必要があります。

CamFeed::CamFeed(ofVideoGrabber& cam) : cam(cam) {} 

参照が何かを参照する必要がありますので、デフォルトに構築することができないためです。コンストラクタ本体に入ると、すべてのデータメンバーが初期化されます。あなたのthis->cam = cam;行は、実際にはcamで参照される値をthis->camが指す値に割り当てる割り当てになります。