返回派生类型时出现协变类型错误
Covariant type error when returning a derived type
>我正在尝试创建一个具有派生类型的基类;在基类中,我有一个纯虚拟方法,它返回 DtBase 类型(另一个类(的内容,并且在派生类中重写它时返回 DtDerived 类型(派生自 DtBase(的东西。 我收到一个错误,说返回的类型与覆盖的纯虚函数的类型不相同或协变。我不明白为什么会这样,DtBase 和 DtDerived 不是协变的吗?
下面是显示此错误的代码:
//DtBase.h
class DtBase{
public:
DtBase();
virtual ~DtBase();
};
class DtDerived: public DtBase{
public:
DtDerived();
~DtDerived();
};
//Base.h
#include "DtBase.h"
class base{
public:
base();
virtual DtBase foo()=0;
virtual ~base();
};
class derived: public base{
public:
derived();
DtDerived foo(); // This is where I get the error
~derived();
};
你需要在 DtDerived::foo(( 中返回一个 DtBase 指针 DtBase::foo(( 和 DtDerived 指针,否则 DtDerived 部分将被简单地切掉,调用者永远不会看到它实际上是一个返回的 DtDerived 。
相关文章:
- 类没有命名C++代码中的类型错误
- 不完整类型错误(E0409、E0070、E0515)
- 使用具有结构不完整类型错误的模板
- 不命名构造函数和析构函数上的类型错误
- 返回派生类型时出现协变类型错误
- 为什么此构造函数没有给出不完整的类型错误?
- 定义模板化结构的特征时出现不完整的类型错误
- 使用重载构造函数时出现不完整的类型错误
- 为什么我得到表达式必须有类类型错误?
- 输出 [left]=input[i] 行中的 c++ 代码中存在无效的类型错误
- 枚举成员不是类型错误
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 外部 "C" Visual Studio 2015 中的显式类型错误,DLL 测试代码
- 非默认析构函数会导致不完整的类型错误
- 为什么按引用传入会导致绑定引用类型错误
- Objective-C C++ 包装器 类型错误的不完整定义
- 输入类型错误
- 当构造函数的参数类型错误时引发异常
- 命名空间中的'bad_cast' 'std' 未命名类型错误
- C UNWORKOWN类型错误