evc中,我在对话框中定义了全局变量HANDLE hComm;但编译是出现如下错误
MSR.cpp
MSRDlg.cpp
Generating Code...
Linking...
MSRDlg.obj : error LNK2005: "void * hComm" (?hComm@@3PAXA) already defined in MSR.obj
ARMV4IDbg/MSR.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
Creating browse info file...
如果把变量定义到对话框类中就没有问题,为什么呢??
在cpp中
HANDLE hComm;
在其它cpp中使用它
extern HANDLE hComm;
没有成功,出现相同的错误
#include "msr1.h"
#include "Sipapi.h"
//}}AFX_INCLUDES
#if !defined(AFX_MSRDLG_H__4EC8CD18_945C_45B5_A062_A519D68F9A7E__INCLUDED_)
#define AFX_MSRDLG_H__4EC8CD18_945C_45B5_A062_A519D68F9A7E__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
HANDLE hComm; //定义的全局变量
/////////////////////////////////////////////////////////////////////////////
// CMSRDlg dialog
class CMSRDlg : public CDialog
{
// Construction
public:
HANDLE hComm;
BOOL InitCom();
BOOL OnMSRInit(BOOL nFlag);
CMSRDlg(CWnd* pParent = NULL); // standard constructor
// void myactivexreg(LPCTSTR pszDllName);
// Dialog Data
//{{AFX_DATA(CMSRDlg)
enum { IDD = IDD_MSR_DIALOG };
CButton m_readGPS;
CButton m_jiaozheng;
CButton m_counter;
CStatic m_msrdata;
CMsr m_msr;
//}}AFX_DATA
}
变量的引用全部在**dlg.cpp中
我就是找不到我在那里还定义了。把所有包含hcomm的都查找出来也没有发现重复定义呀
我在同一个地方定义另外一个全局变量如int a同样显示error LNK2005: "int a" (?a@@3HA) already defined in MSR.obj搞不清楚了
既然如此,建议你将整个project打包上传,我们可以帮你测试一下。
或者,你重新建一个project,将你的程序段代码逐个copy过去,每次都编译一下。
你不要在*.h中声明
在*.cpp中
HANDLE hComm; //定义的全局变量
建议你在
1一个头文件*.h里声明 extern HANDLE hComm; //定义的全局变量
2然后在一个cpp定义 HANDLE hComm;
3这样你的全局变量就可以在其他地方使用了,只要包含声明的头文件就可以了!
是你的.h文件重复包含了 建议在stdafx.h中定义