Я хочу вывести содержимое каждого объекта из приведенного ниже вектора.Iterator не может получить доступ к методам членов производного класса
vector<Employees*> midzer;
«Решение» Я нашел, выполнив следующие действия:
for (vector<Employees*>::iterator i = midzer.begin(); i != midzer.end(); ++i)
{
cout <<
(*i)->getFirstName() << " " << // Base class method.
(*i)->getLastName() << "\n" << // Base class method.
(*i)->getSalary() << "\n" << // Base class method.
(*i)->getNumMeetings() << "\n" << // Derived class method.
(*i)->getNumVacationDays() << endl; //Derived class method.
}
Вопрос заключается в том, что я получаю сообщение об ошибке о том, что getNumMeetings и getNumVacationDays не являются членами сотрудников (базовый класс).
Может ли кто-нибудь уточнить, почему итератор не может «увидеть» производные методы и, если возможно, предоставить решение для этого?
Задача состоит в создании «базы данных» сотрудников, обладающих функциональностью для создания и удаления различных типов сотрудников «на лету», а также для вывода всей базы данных, хорошо отформатированной.
Дополнительная информация:
- Я только позволил создать один вектор.
- Я должен создать базовый класс и три производных класса (Менеджер, Инженер и Исследователь).
/Kenneth
Так оно и есть. Итератор в базовый класс не знает ничего о производных типах. – juanchopanza
Является ли «Сотрудники» базовым классом? Если да, не могли бы вы попытаться отличить итератор от производного класса? (Отказ от ответственности: я недавно работал с Java в тонну, и моя память о эффектах каста C++ в лучшем случае нечеткая) – Trojan
хорошие ответы ниже, но плохой ответ заключается в использовании динамического броска, чтобы попытаться скрыть указатель , затем распечатайте дополнительные функции, начиная с более конкретных типов указателей, и на тех итерациях, когда это будет успешно. – RichardPlunkett