2013-10-24 125 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所指的值。