在C ++中实现纯虚拟类的问题

时间:2010-09-25 23:23:10

标签: c++ class

我有以下课程:

#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 *)

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

typeid(NeighborTile *) != typeid(FloorTile *)。签名有所不同,因此即使NeighborTile继承自FloorTile,它们也不会被视为“相同”的方法。