在vc.net中,用wizard产生一个SDI程序hello,看到在hello.h中有
extern CHELLOApp theApp;而在hello.cpp中有
CHELLOApp theApp;声明不是应该放到.h文件中吗,为什么微软要放到.cpp文件中,而在.h中弄个extern?

解决方案 »

  1.   

    小兄弟,其它的我也不说了这样的声明在.h和.cpp中都 可以 的
      

  2.   

    关于这个问题,得对声明和定义有清楚的认识。
    下面的是定义:
    CHELLOApp theApp;
    定义是用来分配内存空间的.下面的是声明:
    extern CHELLOApp theApp;
    声明只是告诉一下有这个类型的变量存在,具体在哪由连接器确定.总之,声明可以多次,但定义只能一次。
    如果.h文件中用定义的话,那其他.cpp文件包含该.h文件是会发生多重定义的问题,用extern 声明就没问题了.
      

  3.   

    个人觉得楼上说的比较有道理了!当创建theApp这个变量的过程也就是程序的整个运行的过程!呵呵,《深入浅出MFC》说的很明白了!
      

  4.   

    extern: 就是说某个变量已经定义了,你可以在其他的文件中,通过使用“extern”来做声明一下,然后使用该变量,只要“extern”后直接跟变量的名字就好了,而不能同时再该变量赋值初始化:
    比如,在某个文件力定义了
    int i=0;
    在另外的一个文件中,
    只能
    extern int i;
    而不能
    extern int i=0;
      

  5.   

    iamltq(A.QIANG) 
    已经把问题说的比较清楚了啊
    就是声明和定义的问题
      

  6.   

    给你个权威的答案吧:
    在.cpp中声明,在.h中说明外部声明,可以实现其声明的全局性,也就是说,可以实现theApp的全局性变量,之所以在.h中外部声明说明,是因为这个头文件将被系统的所有头文件包含,包含的结果是所有的类中均有了 theApp 的声明。不知道明白了没你