У меня большой проект, и я работаю над его рефакторингом. Основная задача - переписать логгер. Новый логгер (насколько я могу судить) API-совместим со старым, поэтому я полагал, что после изменения заголовка include directory, перекомпилировать и перекомпоновать все должно работать. Но нет. Я получаю несколько ошибок типа undefined reference to <static_data_member>
. Я не могу вставить настоящий код, но он выглядит, например, так:
// Foo.h
class Foo {
static const int bar = 0;
int baz; // assigned in c-tor
void updateBaz() { baz = bar; }
// ....
}
static const int bar
НЕ определено в Foo.cpp. Иногда это печатается с помощью макроса журнала. И раньше он работал (со старым логгером), теперь я должен его определить. Какие изменения могли быть причиной этого?
Другой пример того, что происходит с переменными, объявленными boost:
(...)/blog_adaptor.h:50: error: undefined reference to bbost::serialization::version<CA::CReyzinSignature>::value'
Итак: когда требуются определения для статических элементов и когда они могут быть опущены?