重定义的问题

cyd411 2009-10-29 01:57:16
我在VS2005下建立了一个窗体应用程序。

在stdafx.h文件中包含了一个头文件。

并在一个按钮事件中调用了一下这个头文件的函数ERS_Open(1,5000,5000);

此时问题出现了,提示下面的信息

stdafx.obj : error LNK2005: "void * * ers_hcom" (?ers_hcom@@$$Q3PAPAXA) 已经在 1.obj 中定义
stdafx.obj : error LNK2005: "int __clrcall ers_check(int)" (?ers_check@@$$FYMHH@Z) 已经在 1.obj 中定义
stdafx.obj : error LNK2005: "int __clrcall ERS_Config(int,unsigned int)" (?ERS_Config@@$$FYMHHI@Z) 已经在 1.obj 中定义
stdafx.obj : error LNK2005: "int __clrcall ERS_RecvTimeOut(int,int)" (?ERS_RecvTimeOut@@$$FYMHHH@Z) 已经在 1.obj 中定义
stdafx.obj : error LNK2005: "int __clrcall ERS_SendTimeOut(int,int)" (?ERS_SendTimeOut@@$$FYMHHH@Z) 已经在 1.obj 中定义
stdafx.obj : error LNK2005: "int __clrcall ERS_Open(int,int,int)" (?ERS_Open@@$$FYMHHHH@Z) 已经在 1.obj 中定义
stdafx.obj : error LNK2005: "int * ers_initdone" (?ers_initdone@@$$Q3PAHA) 已经在 1.obj 中定义
C:\Documents and Settings\cyd\桌面\新建文件夹\1\Debug\1.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

请问这个怎么解决?

下面是stdafx.h的内容
#pragma once
#include "erslib.h"

2楼是"erslib.h"的代码

...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-10-30
  • 打赏
  • 举报
回复
stdafx.h是每个模块都包含的,在这个文件里面只能有声明而不能定义函数,否则就会造成重复定义(因为多个模块中都定义了相同的函数)。解决方法就是把函数定义在一个单独的cpp文件里面,在h文件中只写声明。或者只在一个模块中包含这个头文件。
fox000002 2009-10-29
  • 打赏
  • 举报
回复
头文件里写函数的实现代码

多个文件包含之后当然会出现重定义的错误

头文件里一般只写函数声明

否则应该小心,预处理后所有 cpp 里得保证只包含过一次
cyd411 2009-10-29
  • 打赏
  • 举报
回复
将帖子提前那功能怎么没了。。。
cyd411 2009-10-29
  • 打赏
  • 举报
回复
。。。。。。。不好意思,好像发的太长了。。。

其中已经截取一部分了
cyd411 2009-10-29
  • 打赏
  • 举报
回复

// Easy RS-232C LIBrary "erslib.h" by I.N.
// OS:Windows 2000/XP, Windows Mobile 2003/2005
// Compiler:Visual C++ 2005

// 2002/1/9-1/10 ver.1.0
// 2002/1/21 ver.1.1 extended to 8-Port
// 2002/4/18 ver.1.2 extended to 256-Port
// 2002/7/15 ver.1.2A debug over COM10
// 2002/7/16 ver.1.3 parity, xonoff, ERS_XoffXon(), dtr,cts,dsr,rts
// 2002/11/27 ver.1.4 int->DWORD
// 2003/10/16 ver.1.5 add ERS_BaudRate(), add ERS_PECHAR
// 2005/01/31 support WindowsCE(eVC++ 4.0), add ERS_Putc(),ERS_Getc()
// 2005/02/02 add ERS_ConfigDialog()
// add ERS_Printf(),ERS_Puts(),ERS_Gets(), ERS_WPrintf(),ERS_WPuts(),ERS_WGets()
// 2005/02/03 add ERS_WPutc(), ERS_WGetc()
// 2005/02/08 ver.1.6 updating help file
// 2006/10/20 ers_check() -> int ers_check()
// 2006/12/25 ver.1.7 ERS_Open(),ERS_ConfigDialog() for Visual Studio 2005

#pragma once

#include <windows.h>
#include <stdio.h>

//僷儕僥傿僄儔乕帪偺抲偒姺偊暥帤
#ifndef ERS_PECHAR
#ifdef _WIN32_WCE
#define ERS_PECHAR (L' ')
#else
#define ERS_PECHAR (' ')
#endif
#endif

#ifdef _WIN32_WCE
#define ERSLIBMAXPORT 9
int ers_initdone[ERSLIBMAXPORT]={0,0,0,0,0,0,0,0,0};
#else
#define ERSLIBMAXPORT 256
int ers_initdone[ERSLIBMAXPORT]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
#endif



#ifdef _WIN32_WCE
//==================== 僔儕傾儖捠怣偺奐巒 ====================
// n=1~9...COM1:~COM9:
int ERS_Open(int n, int recv_size, int send_size)
{
wchar_t comname[6];

if(n<1 || n>ERSLIBMAXPORT) return 1;
if(ers_initdone[n-1]) return 2;

wsprintf(comname,L"COM%d:",n);

ERSHCOMn=CreateFile(comname,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

// 僆乕僾儞偵幐攕偟偨偲偒
if(ERSHCOMn==INVALID_HANDLE_VALUE) return 3;

//憲庴怣僶僢僼傽偺愝掕
SetupComm(ERSHCOMn,recv_size,send_size);

ers_initdone[n-1]=1;

// 捠怣偺僨僼僅儖僩愝掕
ERS_Config(n,ERS_9600|ERS_1|ERS_NO|ERS_8|ERS_X_N|ERS_CTS_N|ERS_DSR_N|ERS_DTR_Y|ERS_RTS_Y);
ERS_RecvTimeOut(n,1000);
ERS_SendTimeOut(n,1000);
return 0;
}
#else
//==================== 僔儕傾儖捠怣偺奐巒 ====================
// n=1~256...COM1~COM256 ver.1.7
int ERS_Open(int n, int recv_size, int send_size)
{
wchar_t comname[11];

if(n<1 || n>ERSLIBMAXPORT) return 1;
if(ers_initdone[n-1]) return 2;

swprintf_s(comname,11,L"\\\\.\\COM%d",n);

ERSHCOMn=CreateFile(comname,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

// 僆乕僾儞偵幐攕偟偨偲偒
if(ERSHCOMn==INVALID_HANDLE_VALUE) return 3;

//憲庴怣僶僢僼傽偺愝掕
SetupComm(ERSHCOMn,recv_size,send_size);

ers_initdone[n-1]=1;

//捠怣偺僨僼僅儖僩愝掕
ERS_Config(n,ERS_9600|ERS_1|ERS_NO|ERS_8|ERS_X_N|ERS_CTS_N|ERS_DSR_N|ERS_DTR_Y|ERS_RTS_Y);
ERS_RecvTimeOut(n,1000);
ERS_SendTimeOut(n,1000);
return 0;
}
#endif


// ==================== 僔儕傾儖捠怣偺廔椆 ====================
int ERS_Close(int n)
{
if(ers_check(n)) return 1;
if(!CloseHandle(ERSHCOMn)) return 2;
ers_initdone[n-1]=0;
return 0;
}

// 僔儕傾儖捠怣偺廔椆乮偡傋偰暵偠傞乯
void ERS_CloseAll(void)
{
int n;
for(n=1;n<=ERSLIBMAXPORT;n++){
if (ers_initdone[n-1]) ERS_Close(n);
}
}

// 庴怣僶僢僼傽偺僨乕僞悢(僶僀僩)傪挷傋傞
int ERS_CheckRecv(int n)
{
COMSTAT cs;
DWORD err;
if(ers_check(n)) return 0;
ClearCommError(ERSHCOMn,&err,&cs);
return cs.cbInQue;
}

// 憲怣僶僢僼傽偺僨乕僞悢(僶僀僩)傪挷傋傞
int ERS_CheckSend(int n)
{
COMSTAT cs;
DWORD err;
if(ers_check(n)) return 0;
ClearCommError(ERSHCOMn,&err,&cs);
return cs.cbOutQue;
}

//僨乕僞庴怣
int ERS_Recv(int n, void *buf, int size)
{
DWORD m;
if(ers_check(n)) return 0;
ReadFile(ERSHCOMn,buf,size,&m,NULL);
return m;
}

//侾僶僀僩庴怣 ver.1.6
int ERS_Getc(int n)
{
DWORD m;
int c=0;
if(ers_check(n)) return 0;
ReadFile(ERSHCOMn,&c,1,&m,NULL);
if(!m)return EOF;
return c;
}

//侾暥帤庴怣 Unicode斉 1.7
wchar_t ERS_WGetc(int n)
{
DWORD m;
wchar_t c=0;
if(ers_check(n)) return 0;
ReadFile(ERSHCOMn,&c,sizeof(wchar_t),&m,NULL);
if(!m)return EOF;
return c;
}

//暥帤楍庴怣 ver.1.6
//(嵟弶偺\r|\n|\0傑偱撉傓)
int ERS_Gets(int n, char *s, int size)
{
DWORD m;
int cnt=0;
char c;

if(ers_check(n)) return 0;
if(!size) return 0;

for(;;){
ReadFile(ERSHCOMn,&c,1,&m,NULL);
if(!m || c=='\r'|| c=='\n' || c=='\0')break;
*s++=c;
cnt++;
if(size>0 && cnt>=size-1)break;
}
*s='\0';
if(m)cnt++;
return cnt;
}

//暥帤楍庴怣 Unicode斉 1.7
//(嵟弶偺\r|\n|\0傑偱撉傓)
int ERS_WGets(int n, wchar_t *s, int size)
{
DWORD m;
int cnt=0;
wchar_t c;

if(ers_check(n)) return 0;
if(!size) return 0;

for(;;){
ReadFile(ERSHCOMn,&c,sizeof(wchar_t),&m,NULL);
if(!m || c==L'\r'|| c==L'\n' || c==L'\0')break;
*s++=c;
cnt++;
if(size>0 && cnt>=size-1)break;
}
*s=L'\0';
if(m)cnt++;
return cnt;
}

//僨乕僞憲怣
int ERS_Send(int n, void *buf, int size)
{
DWORD m;
if(ers_check(n)) return 0;
WriteFile(ERSHCOMn,buf,size,&m,NULL);
return m;
}

//侾僶僀僩憲怣 ver.1.6
int ERS_Putc(int n, int c)
{
DWORD m;
if(ers_check(n)) return 0;
WriteFile(ERSHCOMn,&c,1,&m,NULL);
return m;
}

//侾暥帤憲怣 Unicode斉 1.7
int ERS_WPutc(int n, wchar_t c)
{
DWORD m;
if(ers_check(n)) return 0;
WriteFile(ERSHCOMn,&c,sizeof(wchar_t),&m,NULL);
return m/sizeof(wchar_t);
}

//暥帤楍憲怣 ver.1.6
//(廔抂\0偼\n傊曄姺偡傞)
int ERS_Puts(int n, char *s)
{
DWORD m;
char c;
int cnt=0;

if (ers_check(n)) return 0;
while(c=*s++){
WriteFile(ERSHCOMn,&c,1,&m,NULL);
if(!m)return cnt;
cnt++;
}
c='\n';
WriteFile(ERSHCOMn,&c,1,&m,NULL);
if(!m)return cnt;
cnt++;
return cnt;
}

//暥帤楍憲怣 Unicode斉 1.7
//(廔抂\0偼\n傊曄姺偡傞)
int ERS_WPuts(int n, wchar_t *s)
{
DWORD m;
wchar_t c;
int cnt=0;

if (ers_check(n)) return 0;
while((c=*s++)){
WriteFile(ERSHCOMn,&c,sizeof(wchar_t),&m,NULL);
if(!m)return cnt;
cnt++;
}
c=L'\n';
WriteFile(ERSHCOMn,&c,sizeof(wchar_t),&m,NULL);
if(!m)return cnt;
cnt++;
return cnt;
}

//COM億乕僩傊偺printf() 1.7
int ERS_Printf(int n, char *format, ...)
{
char buf[256];
va_list vl;

va_start(vl,format);
#ifdef _WIN32_WCE
vsprintf(buf,format,vl);
#else
vsprintf_s(buf,sizeof(buf),format,vl);
#endif
return ERS_Puts(n,buf);
}

//COM億乕僩傊偺printf() Unicode斉 1.7
int ERS_WPrintf(int n, wchar_t *format, ...)
{
wchar_t buf[256];
va_list vl;

va_start(vl,format);

#ifdef _WIN32_WCE
vswprintf(buf,format,vl);
#else
vswprintf_s(buf,256,format,vl);
#endif

return ERS_WPuts(n,buf);
}

//庴怣僶僢僼傽偺僋儕傾
int ERS_ClearRecv(int n)
{
if(ers_check(n)) return 1;
PurgeComm(ERSHCOMn,PURGE_RXCLEAR);
return 0;
}

//憲怣僶僢僼傽偺僋儕傾
int ERS_ClearSend(int n)
{
if(ers_check(n)) return 1;
PurgeComm(ERSHCOMn,PURGE_TXCLEAR);
return 0;
}

//擟堄偺儃乕儗乕僩傪愝掕 ver.1.5
int ERS_BaudRate(int n, int baudrate)
{
DCB dcb;

if(ers_check(n)) return 1;
GetCommState(ERSHCOMn,&dcb);
dcb.BaudRate=baudrate;
if (!SetCommState(ERSHCOMn, &dcb)) return 2;
return 0;
}

#ifndef _WIN32_WCE
//僟僀傾儘僌傪巊梡偟偰愝掕偡傞 ver.1.7 旕WindowsCE偺傒
//儊儌丗CommConfigDialog()偼'\\.\'偑偮偔柤慜偵懳墳偟側偄丠
int ERS_ConfigDialog(int n)
{
COMMCONFIG cc;
DWORD size;
wchar_t comname[7];

if(ers_check(n)) return 1;

swprintf_s(comname,7,L"COM%d",n);

GetCommConfig(ERSHCOMn,&cc,&size);
CommConfigDialog(comname,HWND_DESKTOP,&cc);
if (!SetCommConfig(ERSHCOMn,&cc,sizeof(cc)))return 2;
return 0;
}
#endif

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧