使用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) 处理。