Доступ к переменным статического classа в C ++?
Дубликат:
C ++: неопределенная ссылка на статический член classа
Если у меня есть class / структура, подобный этому
// header file class Foo { public: static int bar; int baz; int adder(); }; // implementation int Foo::adder() { return baz + bar; }
Это не работает. Я получаю «неопределенную ссылку на ошибку« Foo :: bar ». Как получить доступ к переменным статического classа в C ++?
- Когда статический конструктор называется в C #?
- Получение имени classа из статического метода в Java
- Можно ли переопределить статический метод в производном classе?
- Как получить доступ к элементам управления страницей внутри статического веб-метода?
- Область статической переменной в многопользовательском веб-приложении ASP.NET
- Измененный массив в области файлов
- Почему статическое поле должно быть доступно статическим способом?
- Почему допустимая статическая конечная переменная не разрешена в статическом блоке инициализации?
- Создание статической сборки Mac OS XC
- Разница между фреймворком и статической библиотекой в xcode4 и как их называть
- Статическое ключевое слово и его различные применения в C ++
- C # - статические типы не могут использоваться как аргументы типа
- Статические члены classа занимают память, если объект этого classа не создается?
Вы должны добавить следующую строку в файл реализации :
int Foo::bar = you_initial_value_here;
Это необходимо, поэтому компилятор имеет место для статической переменной.
Это правильный синтаксис, однако Foo::bar
должен быть определен отдельно, вне заголовка. В одном из ваших .cpp
файлов скажите следующее:
int Foo::bar = 0; // or whatever value you want
Вам нужно добавить строку:
int Foo::bar;
Это определит вам хранилище. Определение static в classе похоже на «extern» – оно предоставляет символ, но не создает его. т.е.
foo.h
class Foo { static int bar; int adder(); };
foo.cpp
int Foo::bar=0; int Foo::adder() { ... }
для использования статической переменной в classе, сначала вы должны указать значение (не локали) для вашей статической переменной (инициализировать), после чего вы можете получить доступ к статическому члену в classе:
class Foo { public: static int bar; int baz; int adder(); }; int Foo::bar = 0; // implementation int Foo::adder() { return baz + bar; }