c++ 头文件重定义解决心得

        最近在做开发的时候用到很多自己编写的头文件,这样很容易出现 error LNK2005,经过查阅资料,发现网上很多资料都是转载同一个地方的,而当时阅读时一些不明白的地方费了一番周折,不过最终把问题解决了。

      网上也有很多五花八门的解决方案,这里总结一种可行的。开发环境为 VS 2008。

      首先,尽量保证在头文件中只声明变量和函数,不要定义。这个很重要,不然链接时候会出现麻烦。不仅是变量不定义,函数也不要出现定义,但可以出现声明。

    其次,如果以上问题解决后,还有 error LNK2005,那就在每个头文件中作如下修改:

          1、在头文件的开头加入

                           #ifndef _HEAD_H_     //如果没有定义这个宏
                           #define _HEAD_H_     //定义这个宏

          2、在头文件末尾加入

                           #endif

           这样加入之后的头文件内容为:

                        #ifndef _HEAD_H_     //如果没有定义这个宏
                        #define _HEAD_H_     //定义这个宏

                        。。。。。//此处为头文件原来的内容

                         #endif

          说明:加入上述信息的目的是告诉链接程序,该头文件只能被链接一次,这样就可以避免重定义问题。对于宏名字,(此处_HEAD_H_选取的问题,要保证所有头文件中的名字不同,不然链接程序定义具有相同名字的某个头文件之后,所有含有相同宏名字的头文件都不会再被链接。通常的一个命名方法是,把头文件名全部大写,然后前后加上 _ ,再用 _ 替换 . ,如头文件为 title.h,则命名为: _TITIE_H_

        经过这两步,基本error LNK 2005 就解决了。

       仅供初学者参考,如有问题请留言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值