几周前,我开始学习c ++。目前,我必须使用在头文件和.cc文件中声明和定义的函数。问题是,当我在代码中包含头文件时,会收到一条消息,指出存在未定义的函数。如何在文件h和.cc之间建立链接?
在我的代码中,我有
#include "CommSerialLinux.h"
.h文件具有以下内容(出于明显的原因,这只是摘录)
typedef void (*CallBackFuncPtr)(CCommPacket *, PacketType);
class DYNAMIC_LINK CCommSerialLinux
{
public:
CCommSerialLinux();
virtual ~CCommSerialLinux();
BOOL Open(const char *port);
BOOL Close();
BOOL IsOpen(){ return m_IsSerialPortOpened; }
BOOL Receive();
BOOL SendRaw(CWriteRawPacket *SendPacket);
__u32 EncodePkt(CWriteRawPacket *SendPacket, __u8 *Data, int MaxSize);
void RegisterCallBack(CallBackFuncPtr NewFuncPtr, PacketType RegisterType);
private://unimportant content
};
#endif
另一方面,有一个名为CommSerialLinux.cc的文件,其内容如下(摘录)
void CCommSerialLinux::RegisterCallBack(CallBackFuncPtr NewFuncPtr, PacketType RegisterType)
{
if(RegisterType < 0 || RegisterType > 255) return;
m_CallBackFuncPtr[RegisterType] = NewFuncPtr;
m_CallBackFuncReg[RegisterType] = TRUE;
}
编译时收到以下错误:
对`CCommSerialLinux :: RegisterCallBack(void()(CCommPacket ,PacketType),PacketType)的引用
答案 0 :(得分:0)
您需要将.cc
个文件(包括一些头文件-包括从其他位置开始的头文件的重复包含)编译为目标代码。这可以通过单个编译命令来完成,该命令还将对象链接到可执行文件中。或者您可以分别编译每个.cc
文件,然后将它们链接在一起。
编译时,未定义某些函数不是问题-它们应该源自其他已编译对象,并且可以在链接期间找到。
(由于您没有确切说明尝试构建可执行文件的方式,因此我无法更具体地说明了。)