1、未定义的引用
下面的情况是忘了在.cc文件里的方法实现前加类名::
[337/355] link test_service_demo FAILED: test_service_demo c++ -rdynamic -Wl,-rpath,\$ORIGIN -L../3rdparty/libs/linux/x64/debug -L/usr/lib/x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L. @test_service_demo.rsp -lpthread -o test_service_demo libidmsdk.so:对‘ConnectionImpl::convert_create_connection_response_formate(idm::runtime::data::ConnectionQRCode&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’未定义的引用比如: .h class Person { public: void SetConfig(); void ConvertStructToString(); } .cc void Person::SetConfig() {} //错误,而且有时候眼睛很难识别出来,尤其代码多的时候 void ConvertStructToString() {}
2、error LNK2019: 无法解析的外部符号
亲身经历的一种情况是,.h声明void func(const int param), .cc里定义 void func(const int param),这种情况单靠人眼有时候不那么容易发现
3、添加了个简单头文件导致各种不想关的编译报错
如下:这个头文件在用的时候导致idm_app_comm_type.h里的定义文件报错,耗费我半个多小时写了好几遍,但是每次唯独没有注意这个头文件定义,
解决:因为#ifdef _IDM_APP_COMM_TYPE_H_ 这个定义为了让头文件唯一包含,而我这儿这个是从其他头文件抄过来的,导致真实的idm_app_comm_type.h文件里
定义无效,编译报错全是idm_app_comm_type.h声明的类型。
idm_verify_status.h #ifndef _IDM_APP_COMM_TYPE_H_ #define _IDM_APP_COMM_TYPE_H_ enum IDMVerifyStatus { IDM_VERIFIED_UNKNOWN = 0, IDM_VERIFIED_SUCCEED, IDM_VERIFIED_FAILED, IDM_NOT_VERIFIED = -1, }; #endif