【发布时间】:2014-07-10 11:27:28
【问题描述】:
我收到了cannot instantiate abstract class 错误。现在我意识到了这一点的含义,但是我看不出我的代码是如何做错的。所以我在这里寻求帮助。
我有
Action.h:
#ifndef ACTION_H
#define ACTION_H
// ===== Dependencies ===== //
#include ...
...
// ===== Classes ===== //
class Action
{
public:
Action();
void set(...);
virtual void doAction() = 0;
};
#endif
MoveAction.h:
#ifndef MOVE_ACTION_H
#define MOVE_ACTION_H
// ===== Dependencies ===== //
#include ...
...
// ===== Classes ===== //
class MoveAction : public Action
{
public:
MoveAction(...); // Constructor
using Action::set;
void doAction(); // Do action
private:
...
};
#endif
MoveAction.cpp:
#include "MoveAction.h"
MoveAction::MoveAction(...) : Action() {
...
}
/* Do action */
void MoveAction::doAction() {
...
setTile(...);
}
所以基本上我在继承Action.h 的类MoveAction.h 中实现doAction()。但是,当我执行以下操作时:
Actor.cpp:
...
vector<Action> Actor::getActions(...) {
vector<Action> actions = vector<Action>();
actions.push_back(MoveAction(...));
...
return actions;
}
我使用Action 的向量,因此可以将未来的动作类型(例如AttackAction)添加到这个向量中,我需要做的就是调用action.doAction() 来执行动作。但是,执行上述操作会给我cannot instantiate abstract class 错误..
如果我将代码更改为:
...
vector<MoveAction> Actor::getActions(...) {
vector<MoveAction> actions = vector<MoveAction>();
actions.push_back(MoveAction(...));
...
return actions;
}
它工作正常(注意所有类型都更改为MoveAction),但这显然会停止任何可扩展性选项。
有人有什么想法吗?我觉得我错过了一些非常明显的东西。
谢谢!
【问题讨论】:
标签: c++ inheritance polymorphism virtual abstract