Здравствуйте, Anton0682, Вы писали:
A>Можно так инициализировать? Вроде очевидный синтаксис. А MSVC 6 не позволяет...
A>
A>class CSettings
A>{
A> static CSettings * s_pSettings = NULL;
A>};
A>
The declaration of a static data member in its class definition is not a definition and may be of an incomplete type other than cv-qualified void. The definition for a static data member shall appear in a namespace scope enclosing the member’s class definition. In the definition at namespace scope, the name of the static data member shall be qualified by its class name using the :: operator.
The declaration of a static data member in its class definition is not a definition and may be of an incomplete type other than cv-qualified void. The definition for a static data member shall appear in a namespace scope enclosing the member’s class definition. In the definition at namespace scope, the name of the static data member shall be qualified by its class name using the :: operator.
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, _DAle_, Вы писали:
B>...
B>Интегральные статические константы так инициализировать можно. Например вот это B>
B>class CSettings
B>{
B> static const int i = 123;
B>};
B>
B>вполне корректный код. B>Впрочем, VC6 так делать все равно не позволяет...
Я где то в стандартах и(или) у Страуструпа видел (поищите если приспичило), что вроде как память глобальных статич. POD объектов (в т.ч. простых переменных) по умолчанию инициализируется нулями. В твоём случае это и надо. Так зачем огород городить ?
E>Я где то в стандартах и(или) у Страуструпа видел (поищите если приспичило), что вроде как память глобальных статич. POD объектов (в т.ч. простых переменных) по умолчанию инициализируется нулями. В твоём случае это и надо. Так зачем огород городить ?
> Я где то в стандартах и(или) у Страуструпа видел (поищите если приспичило), что вроде как память глобальных статич. POD объектов (в т.ч. простых переменных) по умолчанию инициализируется нулями. В твоём случае это и надо. Так зачем огород городить ?
Извиняюсь, чуток очепятнулся. Вместо "глобальных статич. POD объектов" хотел "глобальных POD объектов".
Здравствуйте, Anton0682, Вы писали:
A>Можно так инициализировать? Вроде очевидный синтаксис. А MSVC 6 не позволяет...
A>[ccode] A>class CSettings A>{ A> static CSettings * s_pSettings = NULL; A>}; A>[/ccod]
Насколько я знаю обьявление статической переменной не есть выделение под нее памяти
поэтому и присвоить ей значение нельзя
Для этого в срр файле типа так
int a::i;
Здравствуйте, Anton0682, Вы писали:
A>Здравствуйте, Кодт, Вы писали:
К>>Здравствуйте, Anton0682, Вы писали:
A>>>Все равно мне не константа нужна... К>>
К>>ну или там геттер-сеттер написать соответствующий.
A>Я паттерн Singleton реализую. Мне кажется его без статического члена не сделаешь...
Сделаешь, пример:
создаешь свой класс CSettings и указываешь ему friend-а, а уже в friend-е твори что хочешь.
Да и про реализации design pattern-ов очень много написано.
Здравствуйте, jdan, Вы писали:
A>>Я паттерн Singleton реализую. Мне кажется его без статического члена не сделаешь...
J>Сделаешь, пример: J>создаешь свой класс CSettings и указываешь ему friend-а, а уже в friend-е твори что хочешь. J>Да и про реализации design pattern-ов очень много написано.
Я хотел реализовать singleton целиком внутри определения класса.
Если ты знаешь как это сделать, то скажи пожалуйста поконкретнее.
E>Извиняюсь, чуток очепятнулся. Вместо "глобальных статич. POD объектов" хотел "глобальных POD объектов".
Да все равно мимо. Если он ее только объявит, то потом очень удивиться при линковке.
> Да все равно мимо. Если он ее только объявит, то потом очень удивиться при линковке.
Не придирайтесь по мелочам, наличие определения подразумевалось. :-[