Глобальные константы в C++

Глобальные константы C++ имеют статическую компоновку. Это отличается от C. При попытке использовать глобальную константу в C++ в нескольких файлах возникает неразрешенная внешняя ошибка. Компилятор оптимизирует глобальные константы, не оставляя места, зарезервированного для переменной.

Один из способов устранить эту ошибку — включить констант-инициализации в файл заголовка и включить этот заголовок в файлы CPP при необходимости так же, как если бы он был прототипом функции. Другая возможность заключается в том, чтобы сделать переменную неконстантной и использовать константную ссылку при оценке.

Следующий пример приводит к возникновению ошибки C2019:

// global_constants.cpp
// LNK2019 expected
void test(void);
const int lnktest1 = 0;

int main() {
   test();
}

Затем:

// global_constants_2.cpp
// compile with: global_constants.cpp
extern int lnktest1;

void test() {
  int i = lnktest1;   // LNK2019
}

См. также

Ошибка средств компоновщика LNK2019