Подтвердить что ты не робот

Доступ к переменным статического класса в С++?

Duplicate:
С++: undefined ссылка на статический член класса

Если у меня есть класс/структура, подобный этому

// header file
class Foo
{
   public:
   static int bar;
   int baz;
   int adder();
};

// implementation
int Foo::adder()
{
   return baz + bar;
}

Это не работает. Я получаю ссылку "undefined на ошибку" Foo:: bar ". Как получить доступ к статическим переменным класса в С++?

4b9b3361

Ответ 1

Вы должны добавить следующую строку в файл реализации:

int Foo::bar = you_initial_value_here;

Это требуется, чтобы компилятор имел место для статической переменной.

Ответ 2

Это правильный синтаксис, однако Foo::bar должен быть определен отдельно, вне заголовка. В одном из ваших файлов .cpp скажите это:

int Foo::bar = 0;  // or whatever value you want

Ответ 3

Вам нужно добавить строку:

int Foo::bar;

Это определит вам хранилище. Определение static в классе похоже на "extern" - оно предоставляет символ, но не создает его. то есть

foo.h

class Foo {
    static int bar;
    int adder();
};

foo.cpp

int Foo::bar=0;
int Foo::adder() { ... }

Ответ 4

для использования статической переменной в классе, сначала вы должны указать значение (не локали) для вашей статической переменной (инициализировать), после чего вы можете получить доступ к статическому члену в классе:

class Foo
{
   public:
   static int bar;
   int baz;
   int adder();
};

int Foo::bar = 0;
// implementation
int Foo::adder()
{
   return baz + bar;
}