C++ のグローバル定数
更新 : 2007 年 11 月
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
}