Ответ 1
Вы должны добавить следующую строку в файл реализации:
int Foo::bar = you_initial_value_here;
Это требуется, чтобы компилятор имел место для статической переменной.
Duplicate:
С++: undefined ссылка на статический член класса
Если у меня есть класс/структура, подобный этому
// header file
class Foo
{
public:
static int bar;
int baz;
int adder();
};
// implementation
int Foo::adder()
{
return baz + bar;
}
Это не работает. Я получаю ссылку "undefined на ошибку" Foo:: bar ". Как получить доступ к статическим переменным класса в С++?
Вы должны добавить следующую строку в файл реализации:
int Foo::bar = you_initial_value_here;
Это требуется, чтобы компилятор имел место для статической переменной.
Это правильный синтаксис, однако Foo::bar
должен быть определен отдельно, вне заголовка. В одном из ваших файлов .cpp
скажите это:
int Foo::bar = 0; // or whatever value you want
Вам нужно добавить строку:
int Foo::bar;
Это определит вам хранилище. Определение static в классе похоже на "extern" - оно предоставляет символ, но не создает его. то есть
foo.h
class Foo {
static int bar;
int adder();
};
foo.cpp
int Foo::bar=0;
int Foo::adder() { ... }
для использования статической переменной в классе, сначала вы должны указать значение (не локали) для вашей статической переменной (инициализировать), после чего вы можете получить доступ к статическому члену в классе:
class Foo
{
public:
static int bar;
int baz;
int adder();
};
int Foo::bar = 0;
// implementation
int Foo::adder()
{
return baz + bar;
}