Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / определение static члена класса в хедере / 8 сообщений из 8, страница 1 из 1
26.03.2014, 12:18
    #38596777
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определение static члена класса в хедере
Всем привет!

Подскажите, пожалуйста, почему нельзя определить 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
26.03.2014, 12:29
    #38596797
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определение static члена класса в хедере
mr_virtusC++ forbids in-class initialization of non-const static member
вроде всё написано
...
Рейтинг: 0 / 0
26.03.2014, 12:35
    #38596801
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определение static члена класса в хедере
Изопропил,
это да, только почему?
...
Рейтинг: 0 / 0
26.03.2014, 12:52
    #38596827
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определение static члена класса в хедере
mr_virtusИзопропил,
это да, только почему?

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

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

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

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

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

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


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

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

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


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