Здрасте.
Сначала код
class CBase{
public:
static int a;
};
int CBase::a;
int _tmain(int argc, _TCHAR* argv[])
{
CBase cb1;
int a = cb1.a;
cb1.a = 100;
CBase cb2;
int b = cb2.a;
return 0;
}
Теперь вопрос. Почему статический член класса(int CBase::a

надо объявлять отдельно? Иначе не слинкуется.
Не пойму. А что компилятору самому это трудно сделать? Из страуструповской писанины ничё не понял
Здравствуйте, Аноним, Вы писали:
А>А>class CBase{
А>public:
А> static int a; // это - объявление статической переменной класса; пока что она нигде не определена
А>};
А>int CBase::a; // а это - ее определение
А>
А>Теперь вопрос. Почему статический член класса(int CBase::a
надо объявлять отдельно? Иначе не слинкуется.
А>Не пойму. А что компилятору самому это трудно сделать?
Не объявлять, а определять.
А когда ты пишешь
extern int a;
, ты тоже рассчитываешь, что компилятор за тебя переменную объявит?
Коспилятору вообще наплевать, что она нигде не определена.
А>Из страуструповской писанины ничё не понял
Читай до полного просветления
Здравствуйте, Аноним, Вы писали:
А>Здрасте.
А>Сначала код
А>А>class CBase{
А>public:
А> static int a;
А>};
А>int CBase::a;
А>int _tmain(int argc, _TCHAR* argv[])
А>{
А> CBase cb1;
А> int a = cb1.a;
А> cb1.a = 100;
А> CBase cb2;
А> int b = cb2.a;
А> return 0;
А>}
А>
А>Теперь вопрос. Почему статический член класса(int CBase::a
надо объявлять отдельно? Иначе не слинкуется.
А>Не пойму. А что компилятору самому это трудно сделать? Из страуструповской писанины ничё не понял
Ну типа все переменные вообще надо определять
А если тебе надо написать
int CBase::a = 157;
Или ещё пуще:
SomeType globalObj;
SomeType2 CBase::a(157, globalObj);
Т.е. вызвать конструктор глобального объекта с каким-то параметрами. Как это компилятор сам сделает?