错误提示
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++ 编译器就是因为错误定位没有想 C# 这么好(这也是没办法,太多一些预编译影响,提示会更复杂),而C#因为本身的 meta 信息,在底层封装得很好,所以错误定位什么都肯定好很多。
那么不再废话。
如下图, ReferCounter 类中的 构造与析构 函数定声明了,但由于之前没有这两个函数的具体定义,导致的错误提示
如果换做在代码架构轻量一些,或是代码量少一些的话,定位错误时很容易的。
这个错误其实在我之前学习过程中也有遇到,只不过但是在一些测试项目方便定位
之所以难排查就因为错误提示与实际错误原因没有啥练习,这个问题就如之前所说,因为涉及编译的前后问题,如果使用了这个类的相关的,都会有报错,但关键错误的定位不能只能定位、且说明不对应,所以是很难排查的。
最后我排查了 N 个文件,一行一行的排查,才发现这两个方法没有实现(最致命的值编译器没有提示,XXX 函数找不到实现,小的测试项目是有类似的提示的),删除两个函数声明就可以正常编译了。
C++ 之所以难说,就因为编译器不友好,因为语法特性太强、太多,目前为止,全球所有顶级的各大C++编译器(MSVC CL的就是我现在用的VS中的,或是GNU的GCC/G++,还有Clang,MAC的)都没能很好的实现各大C++的语法特性规范,可想而知这个C++编译器有多难。