2017-06-12 60 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