error LNK2005 的一点拙见

很多写c++的都碰到过LNK2005的问题,而且是伴随着LNK1169出现。结合网上资料,出这个问题的可能性很多,但是这里我只讨论一种!

头文件中定义了全局变量或者函数

**注意:是定义,不是声明。**在.h文件中定义变量和函数本身没有问题。但是如果你的.h被2个及以上的cpp引用了。或者"另一个.h"引用了这个头文件,而"另一个.h"又被多个cpp引用。都会报这个问题,即使你在.h中加了
#pragma once 或者
#ifndef XXX
#define XXX
#endif 也是没用的
因为多个cpp在编译时都加入这个全局变量或者函数生成了obj,然后在多个obj链接时,就发生重定义了。

解决方法

  1. 如果你能保证该.h文件只在一个cpp中被include,那么你可以在该头文件中定义变量和函数;
  2. 只在xx.h中对变量和函数进行声明,将定义放在xx.cpp中,这样无论.h被引用多少次都没事了;

error LNK2005相关推荐

  1. ZZmsvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义

    FROM: http://blog.csdn.net/sptoor/article/details/6203376 很久没有写程式设计入门知识的相关文章了,这篇文章要来谈谈程式库 (Library) ...

  2. error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法

    error LNK2005: "找到一个或多个多重定义的符号" 已经在 xxxx.obj 中定义 的解决方法 参考文章: (1)error LNK2005: "找到一个或 ...

  3. msvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义

    转载 很需要补充的知识. 可惜网络阅读一直不是强项. 目前实在有点看不进去. 先保存下来吧... 牛到连评论都是贼深奥滴! 很久没有写程式设计入门知识的相关文章了,这篇文章要来谈谈程式库 (Libra ...

  4. greta的问题及解决: LIBCMTD.lib(_wctype.obj) : error LNK2005: _iswspace already defined in xxx.obj...

    greta,一个开源正则表达式模板库: http://research.microsoft.com/projects/greta/ 在debug unicode multithread dll的时候, ...

  5. [转]关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...

    关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决 转自:http://hi.baidu.com/qinfen ...

  6. 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...

    转自:http://hi.baidu.com/qinfengxiaoyue/item/ff262ccfb53b4c2ba0b50a89 引自:http://blog.csdn.net/sptoor/a ...

  7. VS2010 VC++ 编译出错 ---error LNK2005: public: virtual __thiscall CMemDC::~CMemDC(void)

    uafxcwd.lib(afxglobals.obj) error LNK2005: "public: virtual __thiscall CMemDC::~CMemDC(void)&qu ...

  8. error LNK2005: _DllMain@12 already defined的解决办法

    用Visual C++编写DLL,如果在new project时选了MFC DLL,而后又想写成Regular DLL,即拥有自己的DllMain()入口函数,则在build时会遇到类似如下的link ...

  9. C++中的“error:LNK2005 已经在*.obj中定义”异常

     C++中的"error:LNK2005 已经在*.obj中定义"异常问题 异常现象如下: C++中的"error:LNK2005 已经在*.obj中定义" ...

  10. error LNK2005 已经在***.obj中定义

    编程中经常能遇到LNK2005错误--重复定义错误,其实LNK2005错误并不是一个很难解决的错误.弄清楚它形成的原因,就可以轻松解决它了.         造成LNK2005错误主要有以下几种情况: ...

最新文章

  1. 【深度学习理论】(1) 损失函数
  2. Python编程入门到实践 - 笔记( 4 章)
  3. 搭建kubernetes DashBoard
  4. linux覆盖和追加
  5. HDU6168 Numbers
  6. 线性方程组 python_线性方程组的表示 使用Python的线性代数
  7. 《C++ Primer 5th》笔记(7 / 19):类
  8. Linux导出函数控制,linux 下仅导出指定函数的方法
  9. Atomic原子类和Unsafe魔法类 详解
  10. source:读取文件 “/etc/profile” 时发生错误解决办法
  11. Java工具包工具类,java.util.concurrent 包下工具类的使用
  12. python简介pdf_Py之pdfkit:python的库之pdfkit简介、安装、使用方法详细攻略
  13. API3价格流将与Omen预测市场进行集成
  14. Hibernaate 详解
  15. 力扣-692 前k个高频单词
  16. ARM9学习笔记之——SDRAM实验
  17. 14Penrose广义逆(II)
  18. 用戶故事 vs 用例
  19. CentOS 、Linux 配置国内阿里源、yum源镜像
  20. CAD卸载/完美解决安装失败/如何彻底卸载清除干净cad各种残留注册表和文件的方法

热门文章

  1. centos系统上安装masscan
  2. golang对接paypal支付
  3. RS485模块的介绍及引脚连线说明
  4. 医院管理系统/案列/APP/小程序/网站
  5. 群晖系统,部署JAVA-JAR包,SpringBoot项目,手工启动
  6. 通俗易懂的LDA模型
  7. 下列选项中不是具体的python序列类型的是_以下选项中,不是具体的Python序列类型的是...
  8. Sobel边缘检测算法原理
  9. Keil 5安装教程,搭建单片机环境
  10. 【实训】基于java进销存管理系统