如何修复"无法使用类型为 value_type(又名派生*)的左值初始化 Base* 类型的返回对象?
How to fix 'cannot initialize return object of type Base* with an lvalue of type value_type (aka Derived*)?
我有一个基类和一个派生类。当我尝试将派生的类指针转换为基类指针时,我会收到一个汇编错误。
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
类的标头,因此编译器不知道Base
和Derived
之间的关系。
当编译器不知道类型和派生的类型之间的关系时,就会发生此错误。
如果您只有基本和/或派生的前方声明,但没有类别的定义,情况就是这种情况。包括在尝试此转换之前定义定义的标题应解决您的问题。
相关文章:
- 存储模板类型以强制转换回派生<T>
- 在 C++ 中用派生类型重写成员函数
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 在 C++ 中将对象转换为派生类型
- 如何检查派生类的类型?(C++实例)
- 创建派生自可变参数模板包的类型元组
- C++如果采用类类型的函数被传递派生类型,有没有办法给出错误?
- 返回派生类型时出现协变类型错误
- 静态自动 constexpr t = { "red" , "black" , "green" } 是什么类型;派生到?
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- 在从仅移动类型派生的类中定义析构函数在使用 std::vector emplace_back或push_back创建时会
- (C++);动态决定函数的类型(派生类)
- 如何使variadic模板类方法以函数指针为参数,类型派生自函数模板
- 如何防止从 c++03 中的类型派生
- 如何为从特定类型派生的类型专门化模板
- 为什么在返回从函数的返回类型派生的类型本地对象时不选择 move 构造函数?
- 如何在模板类型中强制静态成员初始化?或如何获取从模板类型派生的所有类的计数
- 有没有任何方法可以从C++中的成员指针类型派生对象类型
- 在c++中基于另一个变量类型派生一个变量类型