我在编程过程中将全局变量、过程等全添加在自建的public.h文件中(如下),然后在用到这些变量的时候加上#include "public.h"可是总是出现类似这样的错误:ShowDlg.obj : error LNK2005: "unsigned int __cdecl PP(void *)" (?PP@@YAIPAX@Z) already defined in jDoc.obj即这些变量(过程)在DOC类中已定义过,不必在ShowDlg类里再定义。我不知道如何避免,请各位帮忙!!!////////////////////// //public.h内容#if !defined(AFX_PUB_)
#define AFX_PUB_int Speed;struct obj
{
CString objName;
CString Path;
CSize Size;
float weight;
float speedY;
float speedX;
float aspeedY;
float aspeedX;
float forceX;
float forceY;
};CWinThread *p_thread;
CShowDlg * pll;UINT PP(void*)
{
return 0;
}#endif
#define AFX_PUB_int Speed;struct obj
{
CString objName;
CString Path;
CSize Size;
float weight;
float speedY;
float speedX;
float aspeedY;
float aspeedX;
float forceX;
float forceY;
};CWinThread *p_thread;
CShowDlg * pll;UINT PP(void*)
{
return 0;
}#endif
include和在前面右写一边是一样的
其实最好不要用全局变量
你加在app中
不是到处都能访问么
如果费用不可
要在一处定义
其他的地方用extern再定义一次才行
然后找一个包含此.h文件的c文件加上
int Speed;
并且#include "A。h"
看到这一句了吧,这说明PP的定义是在JDOC.OBJ里完成的,我猜想PP曾经在某处定义,并且编译过(JDOC.OBJ),而你可能出于某种原因将其提到单独的头文件中(PULIB.H)后,再次编译时就出错了,VC傻傻的认为你的PP没有改动(于是从.OBJ中调出PP的定义),所以不编译只连接,而连接时就出错了。你重新编译一下就好(REBULID ALL)。另外查一下,其他地方有没有PP的定义或声明,也许你忘了删除。
头文件是用来声明变量和函数的地方,不能用来实现cpp语句。而全局变量在定义时必须赋初值。因此做法是在h文件中声明,在cpp文件中赋初值
头文件中:
extern CShowDlg * pll;
extern UINT PP(void*);cpp文件中:
pll=NULL;
UINT PP(void*)
{
...
}