2013-03-28 57 views
1

我們有一個在它的創作,它創建了一個不同的class BA對象,它想引用傳遞給自身,像這樣一個class CJ無法的「這」的引用傳遞給另一個類的構造函數

BA:BA(const CJ& myCJRef); 

編譯器總是與錯誤:

error: uninitialized reference member BA::myCJRef

CJRefBA類如類類型定義CJ

現在金額爲&,*或者兩者都不會導致相同的錯誤。由於myCJRef的初始化需要傳遞兩個其他類,但它將指向錯誤的對象,所以初始化很困難。

我是'C'的傢伙......這是混亂。

謝謝大家!


繼回答以下問題,我到哪裏我用這個指針調用在CJ對象的方法,真正的代碼如下觀點:

InputPoolBufferAdapter :: InputPoolBufferAdapter(CJpsMixerChannel & _CJ,INT抖動, INT maxBuffers,無符號長maxBufferAge):myCJpsMixerChannel(_CJ)

{ 
     myCJpsMixerChannel = _CJ; 

     myJitter = jitter; // assuming jitter will be the number of floats 

     myJitterCounter = 0; 

     myMaxBuffers = maxBuffers; 

     myMaxBufferAge = maxBufferAge; 

     myPopulateMetadataRequests = 0; 

     mySendDataReadyAlert = true; 

     clearBufferAdapterThreshhold = CLEAR_BUFFER_ADAPTER_THRESHHOLD; 
};  

void InputPoolBufferAdapter::returnDataBufferToPool (ChannelBuffer_t buf) 
{ 
    void CJpsMixerChannel::myCJpsMixerChannel->returnBufferToInputPool(ChannelBuffer_t *returnBuffer_p); 
}; 

void InputPoolBufferAdapter::notifyDataAvailable() 
{ 
    void myCJpsMixerChannel.notifyDestinationsDataAvailable(void); 
}; 

void InputPoolBufferAdapter::bufferAdapterError (int a) 
{ 
    void &myCJpsMixerChannel.inputBufferAdapterError(int error_code); 
}; 

我試過幾件事情,你可以看到BU t將其不會編譯,所述錯誤是:

InputPoolBufferAdapter.cpp:在成員函數 '虛擬無效InputPoolBufferAdapter :: returnDataBufferToPool(ChannelBuffer_t)': InputPoolBufferAdapter.cpp:33:50:錯誤:前預期初始化「 - > '令牌 InputPoolBufferAdapter.cpp:在成員函數'virtual void InputPoolBufferAdapter :: notifyDataAvailable()'中: InputPoolBufferAdapter.cpp:38:32:錯誤:'。'之前的預期初始化器令牌 InputPoolBufferAdapter.cpp:在成員函數'virtual void InputPoolBufferAdapter :: bufferAdapterError(int)': InputPoolBufferAdapter.cpp:43:32:錯誤:'。'之前的預期初始化器令牌

我對此感到茫然,對於這個不再'混亂',但肯定'迷茫'的軟件傢伙(我不能相信'C'嵌入式系統中的25年後,我不敢相信這讓我如此搞砸了!

感謝所有

+0

你能發佈你的所有代碼嗎?謝謝。 – Tushar

+0

是的,需要看代碼。但是指針而不是引用可能更容易。 – john

回答

1

你應該發表一些代碼。 無論如何,不​​使用任何C++語法11,這是我要走的路:

CJ::CJ() : BA(*this) { //CJ constructor here } 

BA::BA(const CJ& myCJ) : myCJref(myCJ) { //BA constructor here } 

在這裏,我只寫了CJ和BA構造。 BA必須有一個數據成員 const CJ & myCJref 爲此工作。

+0

請另外,請注意,您只能初始化初始化程序列表中的引用(即,在':'之後和構造函數中的'{'之前),以我的方式 – blue

1

想必BA有一個非靜態成員const CJ& myCJRef。引用類型的對象不能保持未初始化,因此您需要確保此引用由構造函數的成員初始化列表初始化。所以構造函數的定義將看起來像這樣:

BA::BA(const CJ& myCJRef) 
    : myCJRef(myCJRef) 
{ 
    // ... 
} 

一切後,:是成員初始化列表。在這種情況下,它表示使用參數myCJRef初始化成員myCJRef(它們可以具有相同的名稱)。

+0

丹和sftrabbit對我來說是錢,它看起來像藍色基本上是一樣的東西。我需要關閉(ahem)指針/引用,並且還需要初始化該構造函數。讓我困惑的問題是,當你初始化const時,它不會使它無法接受新的值(????)謝謝你們......我需要更改我的用戶名...... – CodeMonkey27520

2

我需要猜測一下,但是您的班級BA也有一個名爲myCJRef的成員變量,對不對?它的類型是const CJ&,就像參數一樣。在這種情況下,您需要這樣做:

BA::BA(const CJ& r) : myCJRef(r) 
{ 
    // note: myCJRef = r; would not work here. 
} 

因爲您需要初始化成員變量。該錯誤不涉及您的ctor的參數。

相關問題