我有一个基类和一个派生类。当我尝试将派生类指针转换为基类指针时,我得到一个编译错误。
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;
答案 0 :(得分:5)
定义X
的标头不包括定义类Derived
的标头,因此编译器不知道Base
和Derived
之间的关系。
答案 1 :(得分:1)
当编译器不知道Base和Derived类型之间的关系时会发生此错误。
如果您只有Base和/或Derived的前向声明,但没有类定义,则会出现这种情况。在尝试进行此转换之前,包括定义Derived的标题可以解决您的问题。