如何修复'无法初始化类型为Base *的返回对象,其值为value_type(也就是Derived *)的左值?

时间:2016-12-07 20:02:58

标签: c++ c++11 debugging inheritance casting

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

class Base  {
  ..
}

class Derived: public Base {

}

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

我得到的错误是

  

错误:无法初始化类型&#39; Base *&#39;
的返回对象    左值类型&#39; value_type&#39; (又名&#39;派生*&#39;)在线&#34;返回作家[0] [shard];&#34;

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

如果您只有Base和/或Derived的前向声明,但没有类定义,则会出现这种情况。在尝试进行此转换之前,包括定义Derived的标题可以解决您的问题。