C++ 返回派生类型时出现协变类型错误

C++ 返回派生类型时出现协变类型错误,c++,C++,我试图创建一个具有派生类型的基类;其中,在基类中,我有一个纯虚方法,它返回DtBase类型的某些内容(另一个类),当在派生类中重写它时,它返回DTDERIGED类型的内容(从DtBase派生)。 我得到一个错误,返回的类型和被重写的纯虚函数的类型既不相同也不协变。我不明白为什么会发生这种情况,DtBase和DtDerived是否不协变 下面是显示此错误的代码: //DtBase.h class DtBase{ public: DtBase(); virt

我试图创建一个具有派生类型的基类;其中,在基类中,我有一个纯虚方法,它返回DtBase类型的某些内容(另一个类),当在派生类中重写它时,它返回DTDERIGED类型的内容(从DtBase派生)。 我得到一个错误,返回的类型和被重写的纯虚函数的类型既不相同也不协变。我不明白为什么会发生这种情况,DtBase和DtDerived是否不协变

下面是显示此错误的代码:

//DtBase.h

class DtBase{
    public:
        DtBase();
        virtual ~DtBase();
};

class DtDerived: public DtBase{
    public:
        DtDerived();
        ~DtDerived();
};

您需要在DtDerived::foo()中返回DtBase指针DtBase::foo()和DtDerived指针,否则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();
};