Поместите это вне определения класса, тогда:
const Foo Foo::memberOfFoo = whateverValue;
Это определение Foo::memberOfFoo
, которое может предоставить инициализатор и должно быть в файле .cpp
(как и любое другое определение объектов, оно может появляться только один раз во всей программе, в противном случае вы получите компоновщик ошибки).
Иногда вы можете найти код, который не имеет определений для своих статических элементов данных:
struct A {
// sometimes, code won't have an "const int A::x;" anywhere!
static const int x = 42;
};
Пропуск такого определения действителен, только если A::x
никогда не берется по адресу и никогда не передается в ссылочные параметры. Более формальный способ сказать, когда допустимо опустить определение: «Когда все использования A :: x сразу читают сохраненное значение A :: x». Это касается многих статических целочисленных констант.