gpt4 book ai didi

c++ - 无法将子类 ... 转换为其私有(private)基类

转载 作者:搜寻专家 更新时间:2023-10-31 00:13:14 25 4
gpt4 key购买 nike

我不确定如何修复以下错误

不能将 Cat 转换为其私有(private)基类 Animal

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 cat\n");
}
}
}

int main() {
AnimalQueue animalQ;
Cat cat = Cat("kitty");
animalQ.enqueue(cat); // ERROR
return 0;
}

最佳答案

您可以使用 C 风格的转换来做到这一点:

animalQ.enqueue( (Animal &)cat );

这是为数不多的通过 C 风格的强制转换合法但不能通过 C++ 风格的强制转换的情况之一。更多信息 see here .

虽然基类使用公共(public)继承会是一个更好的设计;私有(private)继承实际上没有有效的用例。

关于c++ - 无法将子类 ... 转换为其私有(private)基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27594593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com