Constantes globales en C++
Las constantes globales de C++ tienen una vinculación estática. Esto es diferente de C. Si intenta usar una constante global en C++ en varios archivos, recibirá un error externo sin resolver. El compilador optimiza las constantes globales y no deja espacio reservado para la variable.
Una manera de resolver este error es incluir las inicializaciones const en un archivo de encabezado e incluir ese encabezado en los archivos CPP cuando sea necesario, tal como lo haría si fuese prototipo de función. Otra posibilidad es hacer que la variable no sea constante y usar una referencia constante al evaluarla.
El ejemplo siguiente genera C2019:
// global_constants.cpp
// LNK2019 expected
void test(void);
const int lnktest1 = 0;
int main() {
test();
}
Y luego,
// global_constants_2.cpp
// compile with: global_constants.cpp
extern int lnktest1;
void test() {
int i = lnktest1; // LNK2019
}