Undefined ссылка на статическую переменную С++

Привет, я получаю опорную ошибку undefined в следующем коде:

class Helloworld{
  public:
     static int x;
     void foo();
};
void Helloworld::foo(){
     Helloworld::x = 10;
};

Мне не нужна функция static foo(). Как я могу получить доступ к переменной static класса в методе non static для класса?

Ответ 1

Мне не нужна функция static foo()

Ну, foo() не является статическим в вашем классе, и вам не нужно делать его static, чтобы получить доступ к переменным static вашего класса.

Что вам нужно сделать, так это просто дать определение для вашей статической переменной-члена:

class Helloworld {
  public:
     static int x;
     void foo();
};

int Helloworld::x = 0; // Or whatever is the most appropriate value
                       // for initializing x. Notice, that the
                       // initializer is not required: if absent,
                       // x will be zero-initialized.

void Helloworld::foo() {
     Helloworld::x = 10;
};

Ответ 2

Код верный, но неполный. Класс Helloworld имеет объявление своего статического члена данных x, но не существует definition этого элемента данных. Кто-то в вашем исходном коде вам нужен

int Helloworld::x;

или, если 0 не является подходящим начальным значением, добавьте инициализатор.