不能转换子类..到其私有基类
Cannot cast subclass ... to its private base class
我不知道如何解决以下错误
无法将 Cat 强制转换为其私有基类动物
class Animal {
private:
std::string name;
public:
Animal(std::string n) {
name = n;
}
};
class Cat : Animal {
public:
Cat(std::string n) : Animal(n) {}
};
class AnimalQueue {
private:
std::list<Animal> cats;
std::list<Animal> dogs;
public:
void enqueue(Animal a) {
if (typeid(a) == typeid(Cat)) {
printf("I'm a catn");
}
}
}
int main() {
AnimalQueue animalQ;
Cat cat = Cat("kitty");
animalQ.enqueue(cat); // ERROR
return 0;
}
您可以使用 C 样式强制转换来执行此操作:
animalQ.enqueue( (Animal &)cat );
这是少数几种通过 C 型演员表合法但不能用 C++ 型演员表完成的情况之一。 有关更多信息,请参阅此处。
不过,对于基类来说,使用公共继承会是一个更好的设计;私有继承实际上没有有效的用例。
默认情况下,继承是私有的。您需要显式告诉编译器使用公共继承。因此,您需要使用以下命令声明您的类:
class Cat : public Animal {
这就是
问题所在,我必须将其公开
class Cat : public Animal
相关文章:
- 从基类实例调用派生类方法而不进行强制转换
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 从未使用过到基类的转换
- 基类到派生类的强制转换向量
- 有没有办法复制派生类指针的向量而不将其强制转换为基类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 如何在运行时将指向派生类的 void* 正确转换为指向基类的 void*
- 从基类的共享指针向下转换到派生类的引用
- 无法从指针到基类转换为指向派生类的指针
- 正在尝试将基类转换为类模板
- 将基类转换为派生类
- Clang和GCC中不明确基类转换之间的行为差异
- 如何从基类转换为派生类
- 根据类型标志将基类转换为派生类
- C++'98 - 将基类转换为派生类
- Dynamic_cast从基类转换到子类时失败