首页 > 解决方案 > 返回派生类型时出现协变类型错误

问题描述

我正在尝试使用派生类型创建基类;在基类中,我有一个纯虚方法,它返回 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();
};

标签: c++

解决方案


您需要在 DtDerived::foo() 中返回 DtBase 指针 DtBase::foo() 和 DtDerived 指针,否则 DtDerived 部分将简单地被切掉,调用者永远不会看到它实际上是返回的 DtDerived。


推荐阅读