Animal
(базовый класс) не имеет переменной-члена breed
, в результате вы получаете ошибку. Даже если Dog
имеет переменную члена породы, Animal
ничего не знает об этом. Правильный код будет приведен к приведению указателя Animal
к Dog
с использованием dynamic_cast
для понижения иерархии классов, тогда у вас будет доступ к члену класса:
cout<<dynamic_cast<Dog*>(animals[0])->breed<<endl;
Обратите внимание, что в целом рекомендуется проверять, не является ли указатель, возвращаемый dynamic_cast
, значением NULL
перед его использованием, поскольку он может вернуть NULL
, если приведение не выполнено.