一个程序内,我新加了一个Gloabal.h与Gloabal.cpp,内容如下:
//Gloabal.h
...
WSAEVENT hExitEvent;//Glaobal.cpp
#include"stdafx.h"然后,我在另一个文件a.h中这样写道:
#include"stdafx.h"//这一句是默认的。
#include"Gloabal.h"
...
hExitEvent=....;
/////////////////////////上面这样写,会出现hExitEvent already defined in...obj错误,为什么呢??而如果我把程序写成如下的样子,就没有问题:
//Gloabal.h
extern WSAEVENT hExitEvent;//Gloabal.cpp
#include"stdafx.h"
WSAEVENT hExitEvent;然后在a.中这样写:
#include"stdafx.h"
#include"gloable.h"
hExitEvent=....///////////这样写就没有问题,可我觉得第一种作法也没有错啊,问题到底在哪里?一般这样的问题我们应该怎么做呢?

解决方案 »

  1.   

    错了,对不起,上面的代码中,a.h应该改成a.cpp,也就是说是在a.cpp(而不是在a.h)中写入:
    #include"stdafx.h"
    #include"gloable.h"
    hExitEvent=....
      

  2.   

    问题就是重复定义了,
    WSAEVENT hExitEvent;//这样的写法是定义,而不是声明
    因为C++的编译是以.cpp文件为单位的,而且顺序并不固定,这样,在编译Global.cpp时,编译器记录下定义过一个全局变量,过了一会,当编译另一个也包含了此头文件的cpp文件时,发现重复定义了,于是出现提示。一般这种问题是所有全局变量专门有一个头文件和一个cpp文件,头文件中都是类似:
    extern WSAEVENT hExitEvent;
    的东东,cpp文件中都是类似:
    WSAEVENT hExitEvent;
    的东东。
    需要使用全局变量的cpp文件包含那个头文件就行了。
      

  3.   

    #ifdef 和 #ifndef 这类关键字可以处理这样的问题吗 ?