В чем проблема с этим кодом? - PullRequest
4 голосов
/ 19 мая 2010
#include<stdio.h>

class A { public: int a;};
class B: public A { 
public:
    static int b;
    B(){
        b++;
        printf("B:%d\n",b);
    }   
};

int main() {

    A* a1 = new B[100];
    A* a2 = new B();
    return 0;
}

Ошибка:

In function `main':
undefined reference to `B::b'
undefined reference to `B::b'
undefined reference to `B::b'
undefined reference to `B::b'

Ответы [ 3 ]

16 голосов
/ 19 мая 2010

Статические переменные должны быть размещены вне класса. Добавьте эту строку за пределы класса B:

int B::b;

Представьте, что статические переменные объявлены с ключевым словом extern. Их еще нужно где-то разместить. Это означает, что распределение никогда не должно быть в заголовочном файле!

3 голосов
/ 19 мая 2010

Поскольку он статический, вам также необходимо определить хранилище для B::b (в определении класса все, что вы сделали, объявили переменную).

Вам необходимо добавить:

int B::b;
0 голосов
/ 19 мая 2010

Вы должны инициализировать свой статический член в соответствующем файле .cpp, например, int B :: b = 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...