【问题标题】:Constructor for '' must explicitly initialize the reference member '''' 的构造函数必须显式初始化引用成员 ''
【发布时间】:2013-11-03 18:45:44
【问题描述】:

我有这门课

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

};

还有这个构造函数:

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

我在构造函数上得到这个错误: '' 的构造函数必须显式初始化引用成员 ''

有什么好的方法可以解决这个问题?

【问题讨论】:

  • 你必须立即初始化一个引用,因为它不能像 ptr 一样为空
  • 仔细想想这行代码是什么意思,不是你想的那样:this->cam = cam; 这不会重新定位引用。它会在this->cam 上调用operator=——它还没有被初始化。

标签: c++ reference member


【解决方案1】:

你需要使用构造函数初始化列表:

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

这是因为引用必须引用某些东西,因此不能默认构造。一旦进入构造函数主体,所有数据成员都已初始化。您的this->cam = cam; 行实际上是一个赋值,将cam 引用的值分配给this->cam 引用的任何值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    相关资源
    最近更新 更多