Simple, присваивает значение a
в теле конструктора:
MyClass ( int i ) {
a = i;
cout << " \n ctor called. a is : "<< a << " \n";
}
Вы не можете использовать список инициализатора для этого, потому что a
не инициализируется , просто присваивается новое значение. Перед вызовом конструктора при запуске программы a
будет инициализирован значением 0 (неинициализированные static
переменные установлены в 0).
Это то, что говорит вам компилятор, что довольно просто:
ошибка: int MyClass :: a является статическим членом данных; его можно инициализировать только при его определении
Хотя это выглядит глупо, вы уверены, что это должно быть static
, а не переменная экземпляра? Только один экземпляр переменной static
существует в вашей программе и имеет время жизни от начала выполнения программы до ее завершения.
РЕДАКТИРОВАТЬ: Кажется, вы понимаете, что будет только один экземпляр переменной static
, судя по одному из ваших комментариев. Просто обратите внимание, что инициализация и назначение - это две разные вещи.