web-dev-qa-db-fra.com

Le constructeur de '' doit initialiser explicitement le membre de référence ''

J'ai cette classe

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

};

Et ce constructeur:

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

J'obtiens cette erreur sur le constructeur: le constructeur de '' doit initialiser explicitement le membre de référence ''

Quelle est la bonne façon de contourner ce problème?

28
clankill3r

Vous devez utiliser la liste d'initialisation du constructeur:

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

En effet, les références doivent faire référence à quelque chose et ne peuvent donc pas être construites par défaut. Une fois que vous êtes dans le corps du constructeur, tous vos membres de données ont été initialisés. Votre this->cam = cam; line serait vraiment une affectation, affectant la valeur référencée par cam à tout this->cam fait référence à.

38
juanchopanza