使用Visual Studio 2019 编写的一个c++项目,编译时报错如下:严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK2005    "char * __cdecl WcharToChar(wchar_t *)" (?WcharToChar@@YAPADPA_W@Z) 已经在 Common.obj 中定义    vkt.wx.bus    E:\code\git\my.cms.web\my.wx.bus\my.wx.bus.obj    1

这个报的是重复定义错误。连函数的名称也报出来了,解决办法简单,就直接搜索C++项目中的报错函数名称就可以了。这时你就可以搜索错误中提到的函数名就会搜到多个函数定义,只需要把函数名称改一下就行了。

来源:lebang2020.cn

报错含义

LNK2005 表示同一个符号(此处为 WcharToChar 函数)在多个 .obj 中被定义,链接器无法确定使用哪一个。

解决办法

  • 在项目中搜索该函数名,找出重复定义的位置,只保留一处实现。
  • 头文件中改用 inline,或头文件只放声明、实现放到 .cpp。
  • 非成员函数可加 static,限制为本编译单元可见。
  • 变量重复定义可用 __declspec(selectany) 处理。

相关阅读