C++ グローバル定数には静的なリンケージがあります。 これは、C とは異なります。C++ でグローバル定数を複数のファイルで使用しようとすると、未解決の外部エラーが発生します。 コンパイラはグローバル定数を最適化し、変数に予約された領域を残します。
このエラーを解決する方法の1つとして、ヘッダーファイルに const 初期化を含め、必要に応じて 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
}