我正在遍历一个Animal
对象列表(其中包含 3 或 4 种不同类型的对象,它们都是从 子类化的Animal
):
foreach (Animal entry, animalList)
{
switch(entry.animalType)
{
case Animal::tiger:
qDebug() << static_cast<Tiger>(entry).tigerString;
break;
}
}
这给了我以下错误:
no matching function for call to 'Tiger::Tiger(Animal&)'
所以我尝试了:
static_cast<Tiger*>(entry).tigerString;
这给了我以下错误:
invalid static_cast from type 'Animal' to type 'Tiger*'
所以最后我决定改成entry
这样的指针类型:
foreach (Animal* entry, animalList)
ETC....
我收到以下错误:
cannot convert 'const value_type {aka const Animal}' to 'Animal*' in initialization
我在这里错过了什么吗?我绝对需要得到tigerString
哪个是特定于子类的字符串Tiger
。
我应该做什么?
更新 请参阅以下内容(代码已被剥离以保持清洁):
std::list<Animal*> animalList;
Tiger *myTiger = new Tiger();
myTiger->animalType= Animal::tiger;
myTiger->tigerString= "I am a tiger";
animalList.push_back(myTiger, animalList);
foreach (Animal* entry, animalList)
{
Tiger* tiger = dynamic_cast <Tiger*> (entry);
if (tiger)
{
// It is a tiger
}
else
{
// it is NOT a tiger
}
}
我在第一行收到以下错误foreach loop
:
cannot dynamic_cast 'animal' (of type 'class Animal*') to type 'class Tiger*' (source type is not polymorphic)