@po4emuch

Как исправить C2259?

Есть два класса: Effect, FireBall. В main содержится следующий код:
vector<Effect> effects;
...
effects.push_back(FireBall("Огненный шар"))
...

Effect состоит лишь из одного заголовка:
class Effect
{
public:
	string name;
	virtual void apply(int &value) = 0;
	//virtual ~Effect() = 0 {};
};


FireBall.h:
#include "Effect.h"
class FireBall : public Effect
{
public:
	int count;
	FireBall(string _name);
	void apply(int &value);
};


FireBall.cpp:
#include "FireBall.h"

FireBall::FireBall(string _name)
{
	count = 10;
	name = _name;
}

void FireBall::apply(int &value)
{
	value -= 1;
}


На этапе компиляции вылетает ошибка C2259, Effect: невозможно создать экземпляр абстрактного класса
  • Вопрос задан
  • 381 просмотр
Пригласить эксперта
Ответы на вопрос 1
myjcom
@myjcom Куратор тега C++
// ...
Effect(string n) : name{ n }{}
virtual ~Effect() = 0;
// ...
// ...
FireBall::FireBall(string _name) : Effect(_name), count{ 10 }
{
}
// ...


https://en.cppreference.com/w/cpp/memory/unique_ptr
vector<unique_ptr<Effect>> effects;
effects.push_back(make_unique<FireBall>("Огненный шар"));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы