节目#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
? 这两个程序有什么区别?