У меня есть extern const
объявление строки в заголовочном файле, и его определение в исходном файле:
// a.h
extern const std::string base;
// a.cpp
const std::string base = "base";
Затем у меня есть другая строка extern const
в другом заголовочном файле и определение этой строки использует определение первой строки:
// b.h
extern const std::string usage;
// b.cpp
const std::string usage = base + " str";
При запуске приложения я получаю эту ошибку:
Сбой процедуры инициализации библиотеки DLL (DLL) c.
Я подключил отладчик к приложению, получил следующее исключение:
Исключение: нарушение прав чтения. это был nullptr.
Это было брошено в base
в b.cpp
. Итак, я понял, что это вопрос порядка инициализации stati c. Но в моем make-файле я перечисляю a.obj
ДО b.obj
, поэтому я не понимаю, почему это происходит.
Обратите внимание, что я получаю эту ошибку только на Windows. Linux в порядке.
Одним из способов является определение base
в заголовочном файле:
// a.h
const std::string base = "base";
// a.cpp
Это единственное решение? Или есть лучший способ?