0

次のような単純な .h ファイルがあります。

//test.h
int x = 12;

たとえば、このファイルをインクルードするmain.cppと、functions.cppリンカーは妥当な次のエラーを生成します。

error LNK2005: "int x" (?x@@3HA) already defined in functions.obj

しかし、変数定義を変更すると:

//test.h
const int x = 12;

リンカ エラーはなくなります。仕方?

4

1 に答える 1

5

const内部リンケージを持つ名前空間スコープで宣言された名前。つまり、インクルードする各ファイルには、test.hという名前の独自のオブジェクトがありますx。§7.1.1/7 を参照:

storage-class-specifierを使用せずに名前空間スコープで宣言された名前には、以前の宣言のために内部リンケージがあり、宣言されていない場合を除き、外部リンケージがありconstます。宣言されたオブジェクトconstと明示的に宣言されexternていないオブジェクトには、内部リンケージがあります。

于 2013-02-27T18:52:37.893 に答える