2012-12-20 129 views
2

我想創建一個嵌套類的構造函數,它使用它的構造函數從父類嵌套類繼承。基本上是:C++鑄造指針參考函數參數中的基類指針

DerivedList<T>::DerivedNested::DerivedNested(DerivedNode*& ptr) 
    : BaseList<T>::BaseNested::BaseNested(ptr) 
{} 

我BaseNested的構造函數的原型是這樣的:

BaseList<T>::BaseNested::BaseNested(BaseNode*& ptr) 

(並且需要得到引用的PTR參數,因爲它需要在其代碼表示指針的地址)

我想我必須將我的DerivedNode *轉換爲BaseNode *,但是:static_cast :: BaseNode *>(ptr)找不到匹配函數,因爲它不是引用,而static_cast :: BaseNode * &>(ptr)給出了無效的轉換錯誤。

dynamic_cast也是如此。 reinterpret_cast編譯,但在執行過程中出現錯誤。

有誰知道我可以怎樣調用該父構造函數?

+1

不可能有兩個引用,一個是類型'DerivedNode *&',另一個是'BaseNode *&'類型,引用同一個指針。指針指針和引用指針與多態性不能很好地協同工作。如果你想要多態行爲,請避免這些事情。 –

回答

4

如果您認爲需要參考,那可能是因爲您想稍後修改指針。問題是派生類中指針的類型是基類中的DerivedNode*BaseNode*。如果基類影響DerivedNode2*它的指針怎麼辦?

您應該使用setters,或將邏輯從基類移動到派生類。

+0

我需要一個引用,因爲BaseNested需要具有一個指向BaseNode(BaseNode **)的指針的屬性。 BaseNested應該像迭代器一樣工作,除了多一個間接尋址,這就是爲什麼需要該特定指針的地址。而我......不確定你的意思是「移動邏輯」? – user1918737

+0

「移動邏輯」=移動派生類中使用此指針的代碼。可能是你能做的最好的。否則,使用指針指針,沒有引用(但你必須非常謹慎)。 – Synxis

+0

工作,非常感謝! – user1918737