当前位置: 首页 > 编程技术 > 正文

解决already defined in PortScan.obj错误

前面已经说过了很多的错误的类型了,有的错误是很简单的,编译器提示你那里有错误,直接改正就可以了

但是有的错误却不那么好解决,最典型的就是错误编译器不提示到具体的语句,或者是提示的语句本来就没有问题,或者是能够Complie通过,但是不能Link
一般能够编译成功但是不能够Link都出现在多文件的程序中,
这次我遇到的错误的信息是:
Compiling resources…
Compiling…
PortScan.cpp
PortScanDlg.cpp
Scan.cpp
Generating Code…
Linking…
PortScanDlg.obj : error LNK2005: “int n_Stop” (?n_Stop@@3HA) already defined in PortScan.obj
PortScanDlg.obj : error LNK2005: “char * IPAddr” (?IPAddr@@3PADA) already defined in PortScan.obj
PortScanDlg.obj : error LNK2005: “int ThreadNum” (?ThreadNum@@3HA) already defined in PortScan.obj
Release/PortScan.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.
我们可以看到编译已经通过了,但是不能够Link,这里说明下,我编写的是MFC程序
因为需要创建多线程,多线程中线程的通信最好的就是使用全局变量,所以我声明了一下变量
BOOL n_Stop;
char *  IPAddr;
在Link的时候提示了上面的错误,具体的错误的发生在PortScan.obj文件中
百思不得其解的情况下,通过修改全局变量的生命的地方,解决了问题

总结问题如下:

原因:如果你和我一样编写MFC程序并且生命了全局变量的话,问题可能出在全局变量的声明上
解决方法:
因为我将全局变量声明到了头文件中,所以出现了错误提示,将需要用到全局变量全部声明到需要使用变量的函数所在的CPP文件的预处理下面

比如我一个按钮的事件函数名称名称为 OnScan ,并且这个函数需要用到变量为 tmp(int 型),那么方式如下:

#include .........
.......... //前面是一些包含头文件之类的预处理命令
#endif //一般在MFC中出现,如果是自己编写的类可能没有这个命令,
           //反正声明到第一个函数定义的前面
int tmp: //声明tmp为int型全局变量
函数类型 类名::OnScan()
{

...

}


本文固定链接: http://kuaile.in/archives/503 | 蒲公英的博客

该日志由 蒲公英 于2012年02月22日发表在 编程技术 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 解决already defined in PortScan.obj错误 | 蒲公英的博客
关键字:

解决already defined in PortScan.obj错误:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter