powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / определение static члена класса в хедере
8 сообщений из 8, страница 1 из 1
определение static члена класса в хедере
    #38596777
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Подскажите, пожалуйста, почему нельзя определить static член класса в хедере:

Например, так:

Код: plaintext
1.
static int currentX = 0;



Происходит ошибка:

error: ISO C++ forbids in-class initialization of non-const static member 'MainWindow::currentX'
static int currentX = 0;
^
Спасибо.
...
Рейтинг: 0 / 0
определение static члена класса в хедере
    #38596797
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusC++ forbids in-class initialization of non-const static member
вроде всё написано
...
Рейтинг: 0 / 0
определение static члена класса в хедере
    #38596801
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
это да, только почему?
...
Рейтинг: 0 / 0
определение static члена класса в хедере
    #38596827
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusИзопропил,
это да, только почему?

По стандарту.

По старому (98).

По новому, (11) можно.

http://www.stroustrup.com/C 11FAQ.html#member-init
...
Рейтинг: 0 / 0
определение static члена класса в хедере
    #38596835
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, кстати, там -- про нестатические члены.
Может статические и сейчас нельзя.
Ну и причина тому весьма прозрачна -- статический член нужно не только где-то объявить, но также и определить.
Определён он должен в одном модуле компиляции, в отличие от заголовка класса с объявлением класса, который
виден во всех модулях, которые его используют.

Если возмущение идёт из-под опыта по Java -- в Java нет раздельной компиляции модулей, поэтому и нет таких проблем.
...
Рейтинг: 0 / 0
определение static члена класса в хедере
    #38596877
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОпределён он должен в одном модуле компиляции, в отличие от заголовка класса с объявлением класса, который
виден во всех модулях, которые его используют.

То есть если бы мы его определили в хедере, и хедере подключили к нескольким .cpp, при этом в этих .срр не определяли этот член, то он за счет определения в хедере, стал бы определен в нескольких файлах(несколько .cpp). А какие взникли бы из-за это проблемы?
...
Рейтинг: 0 / 0
определение static члена класса в хедере
    #38597232
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusТо есть если бы мы его определили в хедере, и хедере подключили к нескольким .cpp, при этом в этих .срр не определяли этот член,
то он за счет определения в хедере, стал бы определен в нескольких файлах(несколько .cpp). А какие взникли бы из-за это проблемы?


Нарушение One Definition Rule. На практике -- не слинковалось бы.
...
Рейтинг: 0 / 0
определение static члена класса в хедере
    #38597322
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

ну да. получается на каждый такой случай: хедер с определенным стат. членом + реализация в .срр, создавали бы в памяти свою переменную
static int currentX = 0;

получается несколько одинаковых переменных в памяти. Будет получается ошибка.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / определение static члена класса в хедере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]