gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:47:38 24 4
gpt4 key购买 nike

我正在尝试创建一个具有派生类型的基类;在基类中,我有一个纯虚方法,它返回 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++ - 返回派生类型时出现协变类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62317097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com