Я читал интро на GTEST и нашел эту часть запутанной:Почему это «недопустимый C++»
Компилятор жалуется на «неопределенные ссылки» на некоторых статических переменных членов Const, но я их определить в классе. Что случилось?
Если ваш класс имеет статический член данных:
// foo.h class Foo { ... static const int kBar = 100; };
Вы также должны определить его вне тела класса в foo.cc:
const int Foo::kBar; // No initializer here.
В противном случае ваш код недействительным C++, и может неожиданно прервать способов. В частности, использование его в тестах сравнения Google Test (EXPECT_EQ и т. Д.) Приведет к возникновению ошибки «неопределенной ссылки».
Может кто-нибудь объяснить, почему определение статической константы в классе без определения ее вне класса тела является незаконным C++?
Очевидное определение в классе класса формально не является * определением *, это просто * объявление *. достаточно использовать значение, но не для использования объекта. в стандарте C++ 98 были проблемы (в ODR), о том, когда что-то было «использовано», но в основном оно исправлено в C++ 0x. –
Вам нужно переслать объявление статических переменных в исходный файл (.cpp), если будут какие-либо ссылки на него. – AJG85