I have kind of a diamond kind of inheritance. But that is not the problem. I am passing a casted type through a setter method. However when I try to recast it to its original type I get bad_cast. Code snippet of the problem below. What am I doing wrongly and how can I fix it.
#include <iostream>
class Animal {
public:
virtual ~Animal() {}
void SetName(const std::string name) {
name_ = name;
}
std::string const &Name() {
return name_;
}
private:
std::string name_;
};
class AnimalA : virtual public Animal {
public:
};
class AnimalB : virtual public Animal {
public:
};
class AnimalAB : public AnimalA, AnimalB {
public:
};
Animal h;
void GetAnimal(const Animal &animal) {
h = animal;
}
int main() {
Animal *animal = new AnimalA();
GetAnimal(*animal);
AnimalA f = dynamic_cast<AnimalA&>(h);
return 0;
}