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

blc*_*llo 0 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
Run Code Online (Sandbox Code Playgroud)

当我尝试创建StackImpl或QueueImpl对象时:

Container *cntr;
cntr = new StackImpl();
Run Code Online (Sandbox Code Playgroud)

要么

Container *cntr;
cntr = new QueueImpl();
Run Code Online (Sandbox Code Playgroud)

我在编译时遇到以下错误:

escape.cpp:在函数"INT主(INT,字符**)":escape.cpp:26:错误:无法分配抽象类型"StackImpl" container.h的目的:23:注:由于以下虚拟函数是pure在'StackImpl'中:container.h:18:注意:virtual void Container :: AddTile(std :: string,FloorTile*)

有任何想法吗?

Jon*_*pan 5

typeid(NeighborTile *) != typeid(FloorTile *).签名不同,因此即使NeighborTile继承,它们也不算作"相同"的方法FloorTile.