//Globals.h
////////////////////////////////////////////////////////////////////////////// //全局变量及宏定义文件
///////////////////////////////////////////////////////////////////////////////
#if !defined(MONITORSERVER_GLOBALS)
#define MONITORSERVER_GLOBALS
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000CString g_strCurDir;                   //加入这个全局变量 ,被2个文件包含时候出现资源已经定义错误
#define T_BACKUPPLAN  _T("T_BACKUPPLAN.xml")
#define T_BACKUPCHECK _T("T_BACKUPCHECK.xml")
#define T_WARNSET   _T("T_WARNSET.xml")
#define T_USERS   _T("T_USERS.xml")
#define S_MODULES   _T("S_MODULES.xml")
#define S_CONTENTS   _T("S_CONTENTS.xml")
#define T_NODES   _T("T_NODES.xml")
#define T_UNITS   _T("T_UNITS.xml")#define BCKTHREADEND  _T("bckthreadend")
#define MYWM_NOTIFYICON WM_USER + 1 
#define WM_BCKTHREADEND WM_USER + 2static char* AllocBuffer(CString strMsg)
{
int nLen = strMsg.GetLength();
char *pBuffer = new char[nLen+1]; 

strcpy(pBuffer,(const char*)strMsg); ASSERT(pBuffer != NULL);
return pBuffer;
}
///////////////////////////////////////////////////////////
#endif

解决方案 »

  1.   

    在Globals.h中使用宏,让其只能被包含一次
    或者使用#pragma once
      

  2.   

    如果想把这个变量作为全局变量,大家读写的是同一个变量,那么应该在这个h文件对应的cpp文件中定义,在h文件中这样声明:
    extern CString g_strCurDir; 
    这样就没有问题了。
      

  3.   

    在.h里声明:extern CString g_strCurDir; 
    在其他任何一个.cpp里声明CString g_strCurDir;就可以了
      

  4.   

    搞定,谢谢了,不过我想知道原因,为什么不能在.h里声明CString g_strCurDir;
      

  5.   

    当然不可以了,这样做就是重复定义..h文件并不会被编译,在编译时会替换#include xxx.h这句话.加上extern修饰,就是在所有函数和程序段中都可以引用.找本C或者C++的书看看,写的很清楚的.