c++ - 返回派生类型时出现协变类型错误
问题描述
我正在尝试使用派生类型创建基类;在基类中,我有一个纯虚方法,它返回 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。
推荐阅读
- wordpress - AWS EFS 上的 Wordpress 媒体上传问题
- vue.js - 浅山深一层
- c# - 从字符串中删除隐藏的字符
- c++ - 使用类模板的内部类模板专门化模板
- python - 我想将我的应用程序提供给某人,但它在他的计算机上不起作用 Python pyinstaller
- visual-studio-2015 - Visual Studio 2015 在哪里存储其 Git 配置信息?
- python - 如何根据使用 Selenium 的 html 从使用 xpath 找到的元素中检索属性 aria-label 的值
- java - 如何分配字符串值并将其存储在 hashmap 中,然后单独检索它?
- javascript - 在 React Native 中从两个类传递数据
- gensim - 更新word2vec模型是否需要混合旧语料库和新语料库?