C++编译问题记录

tech2022-12-16  99

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

 

最新回复(0)