VC++中關於全局量的定義有兩種比較好的方法。
第一種
新建一個Generic Class類,如CGlobals。會產生一個Globals.h頭文件和一個Globals.cpp文件,在ClassView中會產生一個 CGlobals類。由於主要目的是利用產生的.h和.cpp文件,所以,將兩個文件中關於類聲明和定義的部分都刪除或註釋掉,但保留其他語句,此時 ClassView中的CGlobals類消失。
對於全局結構體定義,首先在Globals.h頭文件中構造結構體,用typedef方式,如:
typedef struct tagLineType
{
int ID;
CString Type;
double r0;
double x0;
}LINETYPE; // 名稱可隨便
而後,在Globals.cpp文件中:
LINETYPE *lineType = NULL; // 注意,在這裏初始化
而後,回到Globals.h頭文件:
extern LINETYPE *lineType; // 注意,這裏不能再初始化
對於普通全局變量(如int型)定義,首先在Globals.cpp中:
int iTime = -1; // 注意,在這裏初始化
而後,在Globals.h頭文件中:
extern int iTime; // 注意,這裏不能再初始化
對於全局常量定義,首先再Globals.cpp中:
const int UB = 10;
而後在Globals.h頭文件中:
extern const int UB;
以上是第一種方法,是我自己總結試驗成功的。用該方法定義完畢後,無論哪個.cpp文件要用到全局變量,只需在該.cpp文件中#include "Globals.h"即可,而無需再在.cpp文件中extern,所有全局變量、全局常量、全局結構體都是可見的。該方法的總體思路是,象 theApp那樣,在.cpp中定義,在.h頭文件中extern聲明。另外要注意,變量的初始化一定在Globals.cpp文件中,而不能在 Globals.h頭文件中。
第二種
新建一個.h頭文件,如Globals.h,將所有要定義的全局變量在該頭文件種定義。而後新建另一個頭文件,如GlobalsExt.h,將所有在 Globals.h中定義的全局變量extern聲明,同樣,初始化工作要在Globals.h中進行。定義完畢後,在第一次要使用全局變量的.cpp文件中,#include "Globals.h"頭文件,在以後要使用全局變量的.cpp文件中,#include "GlobalsExt.h"頭文件。
該方法據說是一種比較規範的定義方法,網上有相關文章。但我沒有試成功過,總是提示有重複定義。而且,對於該方法下如何定義結構體亦沒有明確說明。哪位高手可以指點一下。