从 LNK2005 看 stdafx.h

编译错误:
nafxcwd.lib(afxmem.obj) : error LNK2005:
"void __cdecl operator delete(void *)"(??3@YAXPAX@Z) already defined
in LIBCMTD.lib(dbgnew.obj)

问题说明:
http://support.microsoft.com/default.aspx?scid=kb;en-us;q148652


msdn 有关于 LNK2005 的详细说明。 但是一般的症结在于同时使用了 CRT 和 MFC 的运行库, 并且 CRT 在先于 MFC 运行库之前被链接。


问题出现:
取消了预编译头文件, 并且使用了 CRT 有可能导致这个问题. 比如, 在自定义头文件 common.h 申明了程序所使用的全局函数, 并且用到了 CRT 库函数. 这中情况下就不能保证 MFC 运行库先于 CRT 被链接.

处理办法:
1, 如果硬要取消预编译头文件,可以在可能先编译的程序模块中加入 #include “StdAfx.h”.
2, 不要取消预编译头文件. 如果对建立的文件模块比较熟悉的话, 是不会产生什么 “unexpected end of file while looking for precompiled header...”之类的错误的.这种错误主要还是对工程文件的组织不熟悉, 简单的处理办法, 将公共使用的模块头文件放在 “StdAfx.h”中. 尽管这样情况下,改动某些头文件可能使整个工程需要重新编译, 延长编译时间. 但是, 如果正确设计好接口并规整的使用头文件, 预编译这中东西就只会使你的工作效率更高了.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值