2017-02-22 42 views
0

考慮:如何在基本類型引用中存儲對派生類型的引用?

struct Base{}; 
struct Derived: Base{}; 

int main() { 
    Derived *d{}; 
    Base *&b = d; // Error: non-const reference to rvalue. 
    (void)b; 
    return 0; 
} 

正如評論指出,分配試圖存儲非const引用到右值。我知道右值是d轉換爲Base *。但是,如何解決此問題,因此可以通過分配b更改d

+0

我懷疑你想要:'Derived d; Base&b = d;' –

+0

@PiotrSkotnicki不,我真的想要指針。 – AlwaysLearning

+1

如果允許,你可以說'b = new Base;'。 'd'指向一個不相關的對象。 –

回答

1

說明爲什麼它是一個問題,假設您設置了另一個結構

struct OtherDerived : Base 
{}; 

現在考慮會發生什麼,如果你B的定義

b = new OtherDerived(); 

後添加以下行本(如果允許)必須將d(Derived *類型)賦值給OtherDerived *,由於OtherDerived不是從派生派生的,所以這是無效的。

爲了解決這個問題,你可以決定你正在引用的指針實際上是否需要派生指針。如果不是,它可以是一個基指針,然後你對基指針的引用就可以了。

Derived *d{}; 
Base* pointerToABase = d; 
Base*& refToAPointerToABase = pointerToABase; 

否則,如果您引用的指針必須是Derived *而非Base *,那麼您是否可以更改引用的類型:例如,用b替換b的聲明。

Derived*& refToAPointerToADerived = d; 

我知道,這是不是你真正的問題的標題問 - 但你描述不能做到這一點呢。

不知道爲什麼你需要參考指針,很難建議一種替代方法。

相關問題