|
|
|
определение static члена класса в хедере
|
|||
|---|---|---|---|
|
#18+
Всем привет! Подскажите, пожалуйста, почему нельзя определить static член класса в хедере: Например, так: Код: plaintext 1. Происходит ошибка: error: ISO C++ forbids in-class initialization of non-const static member 'MainWindow::currentX' static int currentX = 0; ^ Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 12:18:26 |
|
||
|
определение static члена класса в хедере
|
|||
|---|---|---|---|
|
#18+
mr_virtusC++ forbids in-class initialization of non-const static member вроде всё написано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 12:29:51 |
|
||
|
определение static члена класса в хедере
|
|||
|---|---|---|---|
|
#18+
Изопропил, это да, только почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 12:35:40 |
|
||
|
определение static члена класса в хедере
|
|||
|---|---|---|---|
|
#18+
mr_virtusИзопропил, это да, только почему? По стандарту. По старому (98). По новому, (11) можно. http://www.stroustrup.com/C 11FAQ.html#member-init ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 12:52:19 |
|
||
|
определение static члена класса в хедере
|
|||
|---|---|---|---|
|
#18+
А, кстати, там -- про нестатические члены. Может статические и сейчас нельзя. Ну и причина тому весьма прозрачна -- статический член нужно не только где-то объявить, но также и определить. Определён он должен в одном модуле компиляции, в отличие от заголовка класса с объявлением класса, который виден во всех модулях, которые его используют. Если возмущение идёт из-под опыта по Java -- в Java нет раздельной компиляции модулей, поэтому и нет таких проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 12:56:04 |
|
||
|
определение static члена класса в хедере
|
|||
|---|---|---|---|
|
#18+
авторОпределён он должен в одном модуле компиляции, в отличие от заголовка класса с объявлением класса, который виден во всех модулях, которые его используют. То есть если бы мы его определили в хедере, и хедере подключили к нескольким .cpp, при этом в этих .срр не определяли этот член, то он за счет определения в хедере, стал бы определен в нескольких файлах(несколько .cpp). А какие взникли бы из-за это проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 13:32:07 |
|
||
|
определение static члена класса в хедере
|
|||
|---|---|---|---|
|
#18+
mr_virtusТо есть если бы мы его определили в хедере, и хедере подключили к нескольким .cpp, при этом в этих .срр не определяли этот член, то он за счет определения в хедере, стал бы определен в нескольких файлах(несколько .cpp). А какие взникли бы из-за это проблемы? Нарушение One Definition Rule. На практике -- не слинковалось бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 17:12:26 |
|
||
|
определение static члена класса в хедере
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ну да. получается на каждый такой случай: хедер с определенным стат. членом + реализация в .срр, создавали бы в памяти свою переменную static int currentX = 0; получается несколько одинаковых переменных в памяти. Будет получается ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 18:16:41 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=62&tid=2019587]: |
0ms |
get settings: |
16ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 415ms |

| 0 / 0 |
