如何修复"无法使用类型为 value_type(又名派生*)的左值初始化 Base* 类型的返回对象?

How to fix 'cannot initialize return object of type Base* with an lvalue of type value_type (aka Derived*)?

本文关键字:类型 派生 对象 返回 Base 初始化 何修复 type value      更新时间:2023-10-16

我有一个基类和一个派生类。当我尝试将派生的类指针转换为基类指针时,我会收到一个汇编错误。

class Base  {
  ..
}
class Derived: public Base {
}
class X {
    public:
        Base* getWriter(int shard) {
            return writers[0][shard];
        }
    private:
        mutable vector<vector<Derived*>> writers_;
}

我遇到的错误是

错误:无法初始化类型'base *''
的返回对象 用" value_type"类型的lvalue(又名'derived *')在行上"返回作者[0] [shard];"

定义X的标头不包括定义Derived类的标头,因此编译器不知道BaseDerived之间的关系。

当编译器不知道类型和派生的类型之间的关系时,就会发生此错误。

如果您只有基本和/或派生的前方声明,但没有类别的定义,情况就是这种情况。包括在尝试此转换之前定义定义的标题应解决您的问题。