2012-10-04 88 views
0

在H文件,我宣佈:C++我可以聲明參考成員?

static IDataSynchronization& sync_data_; 

但在CPP,我有sync_data_編譯錯誤:

IDataSynchronization& MasterSlaveSynchronize::sync_data_; 

錯誤是:

MasterSlaveSynchronize::sync_data_ declared as reference but not initialized 

我可以,但不想要聲明是一個指針,我想知道這裏有什麼問題,以及是否有辦法繞過這個。

我不能在聲明初始化,因爲這是一種回調,將通過設置(無構造函數,靜態設置)。

謝謝

+2

引用必須在創建時初始化。 –

+0

**但未初始化**您必須將此引用設置爲某個變量。通過'IDataSynchronization&MasterSlaveSynchronize :: sync_data_ = XXX;' – PiotrNycz

+0

我只能在runrime上設置它,所以使用引用無法幫助回調impl。 –

回答

2

可以,但你需要初始化:

IDataSynchronization& MasterSlaveSynchronize::sync_data_ = something; 
1

引用必須在聲明初始化。如果從你的評論看來你不能那樣做,那麼你將不得不求助於指針。那裏沒有第三種選擇。

+0

愚蠢的問題 - 爲什麼在H文件它dosnt抱怨,並編譯錯誤是在CPP? –

+0

因爲它們必須在定義中初始化,而不是像David所說的那樣聲明。由於該定義不在標題中,因此不會在.h中抱怨。 –

+0

但是David的消息的重要部分是如果你不知道你在初始化時引用了什麼,你將不得不使用指針。 –