Я пытаюсь использовать виртуальные методы на C++.Чистый виртуальный метод под названием
У меня есть иерархия объектов:
class Action {
public:
Action() { }
virtual void action() = 0;
}
class CubeAction : public Action {
public:
CubeAction() { }
void action() {
glutSolidCube(1);
}
};
И у меня есть контейнер для объектов базового класса.
class ActionContainer {
private:
std::vector<Action *> actions;
public:
void add(Action &action) { actions.push_back(&action); }
void doActions() {
for (auto a : actions) {
a->action();
}
}
};
И когда я пытаюсь doActions
:
ActionContainter actions();
CubeAction cubeAction();
actions.add(cubeAction);
actions.doActions();
Я получаю pure virtual method called
ошибку.
Я использовал решение Calling a virtual function on a vector of base classes, но ошибка все же произошла.
UPD: жаль, что мой реальный код: Github. Некоторая ошибка в файле Action.h
, я думаю.
Поскольку код имеет синтаксические ошибки, это не ** настоящий код **. Пожалуйста, напишите полный, но минимальный пример, который читатели могут попробовать. –
@JeremyThompson: Ссылка хорошая, спасибо; акроним, однако, является глупым и контрпродуктивным. Не думайте, что люди, которые задают вопросы здесь, узнают об этом. –
http://meta.stackexchange.com/questions/92060/add-data-se-style-magic-links-to-comments - Я нахожу их полезными –