инициализация статических переменных-членов c ++ - PullRequest
0 голосов
/ 17 марта 2012
  1. Почему компилятор выдает мне ошибку, когда я не инициализирую значение в статической переменной-члене? Разве это не должно быть инициализировано 0?
  2. Почему я должен инициализировать переменную-член вне класса? (это недопустимо, потому что, если вы сделаете это и измените значение этой статической переменной-члена внутри главной функции и создадите объект этого класса, он переназначит статическую переменную mamber старому значению), тогда как постоянный статический член переменные допустимы для инициализации внутри класса (и это возможно, потому что вы не можете изменить значение этой статической переменной-члена в любом случае)?

Ошибка: неопределенная ссылка на имя класса :: a

Ответы [ 2 ]

5 голосов
/ 17 марта 2012

Из опубликованной ошибки компоновщик заявляет, что переменная не была определена , а не что она не была явно инициализирована :

class A
{
    // declaration.
    static int x;
};

// definition (in this case without explicit initialisation).
int A::x;

Компоновщик не должен выдавать ошибку, а компилятор не должен выдавать предупреждение, если не делается попытка использовать переменную static до того, как ей будет присвоено начальное значение.

0 голосов
/ 17 марта 2012

Статический член на самом деле не хранится ни в одном из созданных объектов, поскольку он используется всеми объектами этого класса.

Он должен быть создан только один раз, даже если вы создаете много объектов этого класса. Или даже если вы создаете нет объектов класса. Поэтому вы должны сделать это отдельно.

Компиляторы предупреждают обо всех видах неинициализированных переменных, не только о статических. Наличие переменной без значения обычно не очень полезно, поэтому эти предупреждения хороши. Добавление = 0 не слишком сложно, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...