Я получаю ошибку компилятора C2259
при создании экземпляра класса, который наследуется от других классов, имеющих абстрактные методы.
Схема наследования немного странная и непрозрачная, но мне нужно сделать это таким образом из-за некоторых ограничений проблемы.
Схема наследования выглядит следующим образом:
class A
{
public:
enum Animal { CAT, DOG };
enum Color { RED, GREEN };
enum Food { MEAT, FISH };
protected:
virtual Animal animal() const = 0;
virtual Color color() const = 0;
virtual Food food() const = 0;
};
class B: public A
{
Animal animal() const { return CAT; }
};
class C: public A
{
Color color() const { return GREEN; }
};
class D: public A
{
Food food() const { return FISH; }
};
А затем я объявляю класс с множественным наследованием следующим образом:
class E : public B, public C, public D
{
};
Здесь, когда я пытаюсь создать экземпляр класса E
Я получаю ошибку компилятора C2259
:
error C2259: 'E': cannot instantiate abstract class
note: due to following members:
note: 'A::Color A::color(void) const': is abstract
note: see declaration of 'A::color'
note: 'A::Food A::food(void) const': is abstract
note: see declaration of 'A::food'
note: 'A::Animal A::animal(void) const': is abstract
note: see declaration of 'A::animal'
Что я делаю не так?
Большое спасибо
Javier