错误提示

LNK 2019 错误,其实早找我之前就遇到过:C++ Book Note - LNK 2019

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 “public: __thiscall my_util::ReferCounter::ReferCounter(void)” (??0?KaTeX parse error: Expected group after '_' at position 71: …c: static void _̲_cdecl my_util:…[email protected]@[email protected]@@[email protected]@[email protected]@@Z) 中引用了该符号 10_Wrapping_Obj_GO_ETC D:\jave\Work Files\CPP\OpenGL_Studies\LearnGL\10_Wrapping_Obj_GO_ETC\Main.obj 1

C++ 编译错误:LNK 2019

咋一看,懵了

原因

这个原因可不好发现,浪费了一些时间

C++ 编译器就是因为错误定位没有想 C# 这么好(这也是没办法,太多一些预编译影响,提示会更复杂),而C#因为本身的 meta 信息,在底层封装得很好,所以错误定位什么都肯定好很多。

那么不再废话。

如下图, ReferCounter 类中的 构造与析构 函数定声明了,但由于之前没有这两个函数的具体定义,导致的错误提示
C++ 编译错误:LNK 2019

如果换做在代码架构轻量一些,或是代码量少一些的话,定位错误时很容易的。

这个错误其实在我之前学习过程中也有遇到,只不过但是在一些测试项目方便定位

之所以难排查就因为错误提示与实际错误原因没有啥练习,这个问题就如之前所说,因为涉及编译的前后问题,如果使用了这个类的相关的,都会有报错,但关键错误的定位不能只能定位、且说明不对应,所以是很难排查的。

最后我排查了 N 个文件,一行一行的排查,才发现这两个方法没有实现(最致命的值编译器没有提示,XXX 函数找不到实现,小的测试项目是有类似的提示的),删除两个函数声明就可以正常编译了。

C++ 之所以难说,就因为编译器不友好,因为语法特性太强、太多,目前为止,全球所有顶级的各大C++编译器(MSVC CL的就是我现在用的VS中的,或是GNU的GCC/G++,还有Clang,MAC的)都没能很好的实现各大C++的语法特性规范,可想而知这个C++编译器有多难。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-03
  • 2021-10-24
  • 2022-01-13
  • 2021-08-07
  • 2022-12-23
  • 2021-09-09
猜你喜欢
  • 2022-12-23
  • 2021-12-07
  • 2022-12-23
  • 2018-12-10
  • 2022-01-17
  • 2021-06-19
  • 2022-12-23
相关资源
相似解决方案