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

编程入门 行业动态 更新时间:2024-10-04 05:36:48

error LNK2005:“XXX已经在 XXX.obj 中<a href=https://www.elefans.com/category/jswz/34/1771289.html style=定义"/>

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

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

目前在处理祖传代码,由于未创建头文件,我直接在main.cpp中#include "xx.cpp"导致出现错误报告

错误	LNK2005	"int __cdecl playMain(void)" (?playMain@@YAHXZ) 已经在 play.obj 中定义

原因可能为C++规定不允许有同名的外部函数,链接的时候链接器会发现在xxx.obj和main.obj中定义了同一个函数,会直接报错。
在这种情况下,尝试两种解决方案:

  1. 再建一个与之同名的"***.h"头文件,只复制.cpp文件中各种(类,函数,带extern的变量)的声明,其他的函数实现等都不复制
  2. 在调用函数前加了static ,编译成功且调用函数成功。

所以对此有了疑问,一般来说定义的函数前为extern才可以被其他cpp文件调用,为何用了static才能成功调用?

———————————————————————————————————————————————————————
原因是因为在上一次运行时已经将extern修饰的playMain()传入主函数,所以static修饰后能运行,但此时无法修改已经在main.obj中的playMain函数。所以该方法不可取。

更多推荐

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

本文发布于:2024-02-27 22:18:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1766250.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:定义   error   obj   XXX

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!