为了账号安全,请及时绑定邮箱和手机立即绑定

C ++转换为派生类

C ++转换为派生类

C++
慕丝7291255 2019-10-17 15:21:22
我如何转换为派生类?下面的方法都给出以下错误:无法从BaseType转换为DerivedType。没有构造函数可以采用源类型,或者构造函数重载解析度不明确。BaseType m_baseType;DerivedType m_derivedType = m_baseType; // gives same errorDerivedType m_derivedType = (DerivedType)m_baseType; // gives same errorDerivedType * m_derivedType = (DerivedType*) & m_baseType; // gives same error
查看完整描述

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应该起作用。


希望这可以帮助!


查看完整回答
反对 回复 2019-10-17
?
幕布斯6054654

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


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 443 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信