在vc.net中,用wizard产生一个SDI程序hello,看到在hello.h中有
extern CHELLOApp theApp;而在hello.cpp中有
CHELLOApp theApp;声明不是应该放到.h文件中吗,为什么微软要放到.cpp文件中,而在.h中弄个extern?
extern CHELLOApp theApp;而在hello.cpp中有
CHELLOApp theApp;声明不是应该放到.h文件中吗,为什么微软要放到.cpp文件中,而在.h中弄个extern?
下面的是定义:
CHELLOApp theApp;
定义是用来分配内存空间的.下面的是声明:
extern CHELLOApp theApp;
声明只是告诉一下有这个类型的变量存在,具体在哪由连接器确定.总之,声明可以多次,但定义只能一次。
如果.h文件中用定义的话,那其他.cpp文件包含该.h文件是会发生多重定义的问题,用extern 声明就没问题了.
比如,在某个文件力定义了
int i=0;
在另外的一个文件中,
只能
extern int i;
而不能
extern int i=0;
已经把问题说的比较清楚了啊
就是声明和定义的问题
在.cpp中声明,在.h中说明外部声明,可以实现其声明的全局性,也就是说,可以实现theApp的全局性变量,之所以在.h中外部声明说明,是因为这个头文件将被系统的所有头文件包含,包含的结果是所有的类中均有了 theApp 的声明。不知道明白了没你