error lnk 1169错误的解决办法
来源:互联网 发布:致远互联软件 编辑:程序博客网 时间:2024/05/17 23:38
问题背景描述
最近工作时,遇到了这个错误,我在一个头文件bkdrhash.h中定义了一函数
#ifndef _____H#define ----Hsize_t BKDRhash(char * pch){......}#endif
当我第一次使用这个函数时候,直接用#include”bkdrhash.h“,没出现错误。当我又在同一个工程的另一个cpp文件中使用时,编译阶段出现了error lnk 1169,找到一个或多个重定义的符号,当时我就懵了,不是加了#ifndef-#endif了吗,怎么还是出这样的错误呢?
问题的解决
上网查了一番资料后,我把函数的定和义实现分开,分别放在头文件里和cpp文件里。
//bkdrhash.h#ifndef _____H#define -----Hsize_t BKDRhash(char * pch);#endif
//rkdrhash.cpp#define"rkdrhash.h"size_t BKDRhash(char * pch){......}
这样把函数的定义和实现分离之后,其他函数再调用以上函数时,就没出现该链接错误了,至此我终于明白了两点:
- 为什么会出现多次重定义的错误,原因在于原来直接在头文件(.h)里定义了函数,其他文件在include时,直接把该函数的实现插入了该文件中,只引用一次还好,如果超过1次,则会把同一份代码拷贝到多个文件中,这样就出现了多个同名的函数,当然这!就!是!多重定义了!!!。编译时能通过,因为没有语法错误,然而链接时就会出错。
- 为什么#ifnde – #endif没起作用,原因在于这组命令只会使得该头文件不会被同一个文件包含多次,从而防止出现以上多重定义的错误,然而把函数定义在头文件中,而不同的文件里引用该函数定义的头文件时,就一定会出现lnk 1169错误,原因就在于第1条解释的那样,而声明放在头文件里,其他文件引用时,只是得到仅有的一个函数声明,而不是一个函数定义。
收获
看似一个很寻常的错误,我不仅走运地解决了问题,而且还分析出了错误出现的原因。原来读书没体会到的函数的声明,定义分开的作用竟然还有这样的原因,而一直认为只是出于保密的需要,不给其他人看具体实现才分开的。以后我会谨遵这个教训,坚决把定义和实现分离!
阅读全文
0 0
- error lnk 1169错误的解决办法
- 关于error LNK 2005的解决办法
- 关于error LNK:2019错误的札记
- ERROR LNK错误集锦
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- Atl 编译错误 error LNK****
- 关于ERROR LNK 2005错误
- MFC error LNK 链接错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- 关于ERROR LNK 2005错误
- VS 编译错误error: LNK
- 令人无语的 windows 编程 error LNK 2001 错误
- 有关visual中常见的error lnk错误收集
- zz:关于ERROR LNK 2005错误
- 一个Lnk 2005的错误
- 关于遇到的Lnk 2005的解决办法
- Python学习之Matplotlib (一)
- 定义一个10元素的数组,给其赋值,每个值等于其下标,输出;然后倒排序再输出
- eoj 3451
- 输入三个整数,按从大到小的顺序,用函数指针实现。
- IOC/DI 控制反转/依赖注入
- error lnk 1169错误的解决办法
- 【备忘】【No109】最新 小象学院 机器学习 升级版III 视频教程下载
- Ubuntu16.04 源码安装tensorflow(GPU版)
- HTML
- 蓝桥练习-分糖果
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 实现多线程的三种方式
- plsql远程访问数据库 解决ora-12541:TNS:无监听程序最佳方案
- C/C++中new与malloc的区别