2012-05-22 2 views
0

У меня есть абстрактный класс, в который я хотел бы включить как статическую переменную массив указателей для этого же класса. Этот массив позже будет использоваться производными классами.Статический массив в абстрактном классе

class Base { 
    public: 
    virtual int someValue() = 0; 
    static Base* Bases[100]; 

    void Startup() { 
     Bases[2] = this; // just a test 
    }; 
}; 

class Derived : public Base { 
    public: 
    virtual int someValue() {return 10}; 
}; 

Тем не менее, при компиляции, я получаю следующее сообщение об ошибке: Undefined symbols for architecture i386 "Bases", referenced from: Base::Startup().

Как достичь этого результата?

+0

Участники, объявленные 'static', должны быть определены * вне * класса. –

+0

Вам следует использовать 'std :: vector'. Это намного меньше. – chris

ответ

3

Вы объявили свой массив Bases, но вы его не определили. Вы должны определить его где-то еще, желательно в файле cpp:

Base* Base::Bases[100]; 
+0

Это просто? Вау, я не могу поверить, что я так долго размышлял. Спасибо! – Jaliborc

Смежные вопросы