Доступ к статическим переменным класса в C ++? - PullRequest
25 голосов
/ 13 апреля 2009

Дубликат:
C ++: неопределенная ссылка на статический член класса

Если у меня есть такой класс / структура

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

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

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

Ответы [ 4 ]

58 голосов
/ 13 апреля 2009

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

int Foo::bar = you_initial_value_here;

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

16 голосов
/ 13 апреля 2009

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

int Foo::bar = 0;  // or whatever value you want
15 голосов
/ 13 апреля 2009

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

int Foo::bar;

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

foo.h

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

foo.cpp

int Foo::bar=0;
int Foo::adder() { ... }
1 голос
/ 11 ноября 2015

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

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

int Foo::bar = 0;
// implementation
int Foo::adder()
{
   return baz + bar;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...