C++无法解析的外部符号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++无法解析的外部符号相关的知识,希望对你有一定的参考价值。

错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall C分数加减法Dlg::C分数加减法Dlg(class CWnd *)" (??0C分数加减法Dlg@@QAE@PAVCWnd@@@Z),该符号在函数 "public: virtual int __thiscall C分数加减法App::InitInstance(void)" (?InitInstance@C分数加减法App@@UAEHXZ) 中被引用 C:\Users\行健\Documents\Visual Studio 2013\Projects\分数加减法\分数加减法\分数加减法.obj 分数加减法

可以把obj给你

参考技术A 你太牛了,类名都用上中文了,这样行么?

编代码文件名、类名、变量名尽量用英文吧追问

试了,可以用中文。没区别

追答

那怎么说 C分数加减法Dlg::C分数加减法Dlg 这个构造函数没有呢?是不是你没有实现 C分数加减法Dlg这个类?

追问

追答

有实现,也有以 CWnd *作为参数的构造函数? 如果有,但是链接的时候找不到

你看看最后链接的语句有没有包含 C分数加减法Dlg 类所在 cpp对应的.obj文件?

参考技术B 用#progma comment(lib, "libname.lib")把lib添加进来没?

“error LNK2019: 无法解析的外部符号”之分析

http://www.cnblogs.com/hiloves/p/4678848.html

  1. 这种错误的本质是链接器无法在已编译的obj、lib或dll文件中找到函数定义。
  2. 我遇到的问题是c和c++混编。

你自己写的函数声明的头文件也写了函数定义的cpp文件也加入工程了而且你很确定函数体肯定是在这个库文件中,却依然出现LNK2019错误。可能原因:C语言和C++语言混编,因为C++支持函数重载所以C++编译器生成的库文件中的函数名会面目全非,例如C编译器会生成 _readRegmark 这个函数名,而C++编译器则生成了"void __cdecl readRegmark(char *)" (?readRegmark@@YAXPAD@Z)这么个函数名。当你的函数是用C语言写的,VS编译器会按C语言规则编译,但链接器却不知道还傻傻的用C++规则的函数名去找结果就找不到了,而你还百般肯定TM的不就在这个库中吗你个睁眼瞎。解决:在C语言的头文件中加入

#ifdef __cplusplus
extern "C" {
#endif

void readRegmark(char *regmark);  //这里写函数声明

#ifdef __cplusplus
}
#endif

    给链接器提示这个函数是C语言的,别TM找错了。

以上是关于C++无法解析的外部符号的主要内容,如果未能解决你的问题,请参考以下文章

C++无法解析的外部符号

C++ error LNK2001: 无法解析的外部符号

c++ 无法解析的外部符号 1>p.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall

C++学习(四五五)error: LNK2019: 无法解析的外部符号

在 Windows 上构建 C++ 项目时,Tensorflow 2.3 无法解析机器生成的文件中的外部符号

“error LNK2019: 无法解析的外部符号”之分析