C/C++ error LNK2005:”XXX已经在 XXX.obj 中定义

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言 pthread

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


C/C++ error LNK2005:

一.error LNK2005:”XXX已经在 XXX.obj 中定义


1.C/C++ 中,当头文件定义变量时,可能会发生 error LNK2005。 例如,如果在项目中的多个源文件中包括此头文件,则会导致错误


// LNK2005_global.h
int global_int;  // LNK2005

解决办法:

方案一:在头文件中声明 变量,然后定义它,并选择性地在一个且只有一个源文件中 extern int global_int; 初始化它 int global_int = 17;  此变量现在是全局变量,可以通过声明在任何源文件中使用它,例如,通过 extern 包括头文件。 对于必须是全局变量的变量,我们建议采用此解决方案,但良好的软件工程实践可最大程度地减少全局变量。

方案二:声明 static 静态变量, 这会将定义的范围限制为当前对象文件,并允许多个对象文件具有其自己的变量副本。 不建议在头文件中定义静态变量,因为可能会与全局变量混淆。 倾向于将静态变量定义移动到使用它们的源文件中。


2.当头文件定义不是 的函数时,可能会发生 error LNK2005 。 如果在多个源文件中包括此头文件,则可执行文件中会有多个函数定义。

// LNK2005_func.h
int sample_function(int k) { return 42 * (k % 167); }  // LNK2005

解决办法:

方案一:将 static  inline 关键字添加到 函数:

static  inline int sample_function(int k) { return 42 * (k % 167); }

方案二:从头文件中删除函数体并仅保留 声明,然后在一个且只有一个源文件中实现函数

//.h头文件

int sample_function(int k);

//.cpp文件

int sample_function(int k) { return 42 * (k % 167); }


二.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 va_start / va_end / va_arg 自定义 printf 函数
  16. C语言 main 函数参数 main(int argc, char *argv[])
  17. C语言 结构体struct简介(一)
  18. C语言 结构体struct定义和使用(二)
  19. C语言 结构体struct数组(三)
  20. C语言 结构体struct指针(四)
  21. C语言 结构体struct成员函数(五)
  22. C语言 结构体struct嵌套(六)
  23. C语言 结构体struct值传递和址传递(七)
  24. C/C++ error: cannot assign to non-static data member within const member function ‘xxxx’
  25. C++ 关于类中 const 的使用
  26. C/C++ =delete
  27. C/C++ 条件编译 #ifdef
  28. C/C++ error C2065: “M_PI”: 未声明的标识符
  29. C/C++ error C2027: 使用了未定义类型“std::tuple”
  30. C/C++ vs 没有匹配 if 的非法 else 问题解决办法
  31. C/C++ Visual studio 中文注释导致编译不能通过
  32. C/C++ error C2589: “(”: “::”右边的非法标记
  33. C/C++ error:表达式是必须修改的左值
  34. C/C++ error C4996: ‘getch’: The POSIX name for this item is deprecated. Instead, use the ISO C++ conf
  35. C/C++ error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
  36. C/C++ std::string 字符串分割
  37. C/C++ std::string 使用介绍
  38. Visual Studio 中 dumpbin 工具使用
  39. C/C++ error LNK2005:”XXX已经在 XXX.obj 中定义

未经允许不得转载:猿说编程 » C/C++ error LNK2005:”XXX已经在 XXX.obj 中定义
喜欢(0) 打赏

评论抢沙发

评论前必须登录!

文章付费之后,如果下载源码失败,请直接留言,博主看到消息会及时处理的,感谢配合!!!共勉!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏