2017-06-12 62 views
0

我正在試圖獲取我的Base類實例並將其轉換爲派生類類型。因爲我只能得到我的基類實例的const引用,所以我很難讓它正確轉換。有人有想法嗎?C++:將基類的const常量引用轉換爲派生類

class Base 
{ 

}; 

class Derived : public Base 
{ 

}; 

Base someBaseInstance; 
const Base& GetBase() 
{ 
    return someBaseInstance; 
} 

int main() 
{ 

    Derived& derived = static_cast<Base&>(GetBase()); 
    return 0; 
} 
+1

你不能讓一個基地派生。沒有關於如何完成對象的派生部分的信息。 – NathanOliver

+1

如果你的'Base'實例不是'Derived',你爲什麼要把它轉換爲Derived'?這聽起來像是一個XY問題。爲什麼你需要這樣做? – Jack

+2

編譯的劇集將是'const Derived&derived = static_cast (GetBase());'但它只會產生未定義的行爲。你也可以拋棄'const',但這會讓它變得更糟。 – nwp

回答

0

您必須聲明您的實例爲Derived對象。它可以被引用並通過,因爲它是Base,但必須聲明爲Derived

Derived someDerivedInstance; 

此外,爲BaseDerived之間的轉換,你應該使用dynamic_cast<>

Derived &derived = dynamic_cast<Derived&>(GetBase()); 
+0

我的解決方案出現此錯誤:can not dynamic_cast'GetBase()'(類型'const class Base')to類型'類Derived&'(轉換轉換爲constness) – DoubleVoid

+0

轉換爲const Dervied&給了我這個錯誤:can not dynamic_cast'GetBase()'(類型'const class Base')鍵入'const class Derived'(源類型不是多態) – DoubleVoid