2013-10-24 16 views
17

ich dieser Klasse habenKonstruktor für ‚‘ muss explizit das Referenzelement initialisieren ‚‘

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

}; 

Und diesen Konstruktor:

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

ich diesen Fehler an den Konstruktor: Konstruktor für ' 'muss das Referenzelement explizit initialisieren' '

Was ist ein guter Weg, um dies zu umgehen?

+2

Sie müssen eine Referenz sofort initialisieren, da sie nicht null sein kann wie ein ptr – aaronman

+6

Denken Sie sorgfältig darüber nach, was diese Codezeile bedeutet, es ist nicht das, was Sie denken: 'this-> cam = cam;' Dies würde nicht zielen die Referenz. Es würde "operator =' on 'this-> cam" heißen - was noch nicht initialisiert wurde. –

Antwort

29

Sie müssen den Konstruktor Initialisiererliste verwenden:

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

Dies liegt daran, Verweise auf etwas beziehen müssen und daher nicht standardmäßig aufgebaut werden kann. Sobald Sie sich im Konstruktor befinden, wurden alle Ihre Datenelemente initialisiert. Ihre this->cam = cam; Zeile wäre wirklich eine Zuweisung, die den Wert von cam auf was auch immer this->cam verweist verweist.

Verwandte Themen