статическая переменная. Как оказалось, в теле класса её инициализировать нельзя. Вопросы:
1) Почему нельзя инициализировать статические поля в теле класса? Почему это запрещено
2) Где инициализировать статическую переменную - в хедере или в реализации
1 константую можно 2 в конструкторе
В cpp файле
Можно с помощью inline static
Компилятор не знает в каком tu разместить твою глобальную переменную. Требует от тебя указаний. Но статическую переменную всегда можно обрамить в статическую функцию и то6да инициализируй в хедере. Ну или пользуйся средствами C++ 17.
1) инициализация это логика, непонятно в каком компиляционном юните она должна быть
1) Объявление статической переменной в теле определения класса -- это только объявление, не определение. Инстанс этой переменной должен быть ОДИН, а не столько раз , сколько единиц компиляции включают этот заголовок. (это причина того, почему это объявление а не определение). Потому, что это -- объявление, инициализировать статический член класса в теле класса нельзя. Это надо делать в ОПРЕДЕЛЕНИИ этой переменной, которое должно обязательно быть в одной из единиц компиляции. 2) Где инициализировать статическую переменную - в хедере или в реализации В любой единице трансляции эта переменная должна быть ОПРЕДЕЛЕНА (отдельно) и там она может быть инициализирована.
Обсуждают сегодня