我按照从我上一篇文章得到的指示并重新编写了我的代码。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:它总是打印不导游。
如何归档多态行为?
你能请指教吗? (我是新的C++) 我使用C++ 98
非常感谢
这是因为矢量类型。保持单独的矢量列表添加引导对象。 –
user1502952
是的,你有一个指向Tour对象的指针列表...因此引用列表总是会产生Tour *。不应该在那里推行GuidedTour * - 编译器会尝试将它们投射到Tour *,这意味着稍后会出现问题。 – HvS
这是一个学校任务,我需要使用单个向量并从中检索值 –