プログラム#1
// file.h
class File
{
public:
static const int var = 9;
};
-
// main.cpp
#include <iostream>
#include "file.h"
using namespace std;
int main() {
File f;
cout << f.var;
return 0;
}
プログラム#2
// file.h
int GlobalVar ;
class File
{
public:
static const int var = 9;
};
-
// main.cpp
extern int GlobalVar;
#include <iostream>
#include "file.h"
using namespace std;
int main() {
cout << GlobalVar;
return 0 ;
}
プログラム#1は正常に実行されていますが、プログラム#2でリンカーエラーが発生します。
error LNK2005: "int GlobalVar" (?x@@3HA) already defined in file.obj
ヘッダーファイルがコンパイルされないことは知っています。次に、上記の場合、コンパイラは変数varの定義を知っていますが、GlobalVar
?の定義を見つけることができません。この2つのプログラムの違いは何ですか?