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