我有以下课程:
#include <string>
#include <stack>
#include <queue>
#include "map.h"
using namespace std;
#ifndef CONTAINER_H_
#define CONTAINER_H_
struct PathContainer {
int x, y;
string path;
};
class Container {
public:
virtual void AddTile(string, FloorTile *) = 0;
virtual void ClearContainer() = 0;
virtual PathContainer *NextTile() = 0;
};
class StackImpl : public Container {
private:
stack<PathContainer> cntr;
public:
StackImpl();
void AddTile(string, NeighborTile *);
void ClearContainer();
PathContainer *NextTile();
};
class QueueImpl : public Container {
private:
queue<PathContainer> cntr;
public:
QueueImpl();
void AddTile(string, NeighborTile *);
void ClearContainer();
PathContainer *NextTile();
};
#endif
当我尝试创建像这样的StackImpl或QueueImpl对象时:
Container *cntr;
cntr = new StackImpl();
或
Container *cntr;
cntr = new QueueImpl();
我在编译时遇到以下错误:
escape.cpp:在函数'int main(int,char **)'中: escape.cpp:26:错误:无法分配抽象类型'StackImpl'的对象 container.h:23:注意:因为以下虚函数在'StackImpl'中是纯粹的: container.h:18:注意:virtual void Container :: AddTile(std :: string,FloorTile *)
有什么想法吗?
答案 0 :(得分:5)
typeid(NeighborTile *) != typeid(FloorTile *)
。签名有所不同,因此即使NeighborTile
继承自FloorTile
,它们也不会被视为“相同”的方法。