Я следил за инструкциями, которые я получил от своего последнего сообщения, и переписал мой код.Ошибка проверки типа C++
Моего заголовок файл
#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
#include <typeinfo>
#include "Tour.h"
#include "GuidedTour.h"
using namespace std;
class TourManager {
private:
vector<Tour *> tours;
void setupTour();
string getUserInput();
string displayMainMenu();
void displayTourDetails();
void callDisplayOnEach();
void addBookingsToTour();
public:
TourManager();
void go();
};
Тогда у меня есть функция, чтобы заселить в «список» вектор с туром и объектами guidedTour.
void TourManager::setupTour() {
tours.push_back(new Tour("FP001", "Fun Park 3 Day Pass", 110.00));
tours.push_back(new GuidedTour("SK003", "Learn to Ski Adventure Tour", 240.00, "28/07
}
void TourManager::callDisplayOnEach() {
for (vector<Tour *>::iterator it = tours.begin() ; it != tours.end(); ++it)
{
if(typeid(*it) == typeid(GuidedTour))
{
cout << "Guided Tour" << "\n";
}
else
{
cout << "NOT Guided Tour : " << typeid(*it).name() << "\n";
}
}
}
Однако я всегда возвращаюсь к объектам тура. EG: он всегда печатает NOT Guided Tour.
Как я могу архивировать полиморфное поведение?
Не могли бы вы посоветоваться? (Я новичок в C++) Мои необходимо использовать C++ 98
Большое спасибо
Это из-за вектора типа. Сохраняйте отдельный векторный список для добавления объектов guidtour. –
user1502952
Да, у вас есть список указателей на объекты Tour ... поэтому ссылка на список всегда даст Tour *. Нельзя толкать GuidedTour * там - компилятор попытается отбросить их в Tour *, а это значит, что проблема позже. – HvS
Это для школьного задания, я должен использовать один вектор и извлекать из него значения –