3 回答
TA贡献2016条经验 获得超9个赞
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应该起作用。
希望这可以帮助!
TA贡献1876条经验 获得超7个赞
您不能将基础对象转换为派生类型-它不是该类型。
如果您有一个指向派生对象的基本类型指针,则可以使用dynamic_cast对该指针进行强制转换。例如:
DerivedType D;
BaseType B;
BaseType *B_ptr=&B
BaseType *D_ptr=&D;// get a base pointer to derived type
DerivedType *derived_ptr1=dynamic_cast<DerivedType*>(D_ptr);// works fine
DerivedType *derived_ptr2=dynamic_cast<DerivedType*>(B_ptr);// returns NULL
- 3 回答
- 0 关注
- 443 浏览
添加回答
举报