Это ситуация:C++ ошибка: не может объявить поле, чтобы быть абстрактным типом
class Base {
virtual void methodA() = 0;
virtual void methodB() = 0;
};
class Base_A : public Base {
void methodA();
void methodB();
};
class Base_B : public Base {
void methodA();
void methodB();
};
class MyClass {
private:
Base * b;
};
Когда я компилирую это дает сообщение об ошибке:
error: cannot declare field MyClass::b to be of abstract type because the following virtual functions are pure within Base:
Base::methodA()
Base::methodB()
Как решить эту проблему?
UPDATE Он компилируется. Я не знаю, что я изменил
Действительно ли это 'Base * b;', а не 'Base b;'? – sharptooth
Правильно ли отредактирован ваш код? Он действительно компилирует OK и является правильным. Возможно, ваш исходный код имел «Base b» вместо «Base * b». «Base b» даст ошибку, которую вы получите. – Skizz
Также .. не забудьте сделать базовый деструктор виртуальным. – Naveen