C ++转换为派生类

我如何转换为派生类?下面的方法都给出以下错误:


无法从BaseType转换为DerivedType。没有构造函数可以采用源类型,或者构造函数重载解析度不明确。


BaseType m_baseType;


DerivedType m_derivedType = m_baseType; // gives same error


DerivedType m_derivedType = (DerivedType)m_baseType; // gives same error


DerivedType * m_derivedType = (DerivedType*) & m_baseType; // gives same error


慕丝7291255
浏览 445回答 3
3回答

慕沐林林

dynamic_cast应该是您想要的。编辑:DerivedType m_derivedType = m_baseType; // gives same error上面的代码似乎正在尝试调用赋值运算符,该赋值运算符可能未在DerivedType类型上定义并且接受BaseType类型。DerivedType * m_derivedType = (DerivedType*) & m_baseType; // gives same error您在此处的路径正确,但是dynamic_cast的用法将尝试安全地强制转换为提供的类型,如果失败,则将返回NULL。在此处继续存储,请尝试以下操作(但请注意,当您从基本类型转换为派生类型时,转换将返回NULL):DerivedType * m_derivedType = dynamic_cast<DerivedType*>(&m_baseType);如果m_baseType是一个指针,并且实际上指向DerivedType类型,则dynamic_cast应该起作用。希望这可以帮助!

幕布斯6054654

您不能将基础对象转换为派生类型-它不是该类型。如果您有一个指向派生对象的基本类型指针,则可以使用dynamic_cast对该指针进行强制转换。例如:DerivedType D;BaseType B;BaseType *B_ptr=&BBaseType *D_ptr=&D;// get a base pointer to derived typeDerivedType *derived_ptr1=dynamic_cast<DerivedType*>(D_ptr);// works fineDerivedType *derived_ptr2=dynamic_cast<DerivedType*>(B_ptr);// returns NULL
打开App,查看更多内容
随时随地看视频慕课网APP