建立头文件和 .cc 文件之间的关系

establish relationship between header and .cc file

几周前我开始学习c++。这时我必须使用在头文件和.cc 文件中声明和定义的函数。问题是当我在我的代码中包含头文件时,我收到一条消息说有未定义的函数。如何在文件h和.cc之间建立link?

在我的代码中我有


#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;
}

编译时出现以下错误:

reference to `CCommSerialLinux::RegisterCallBack(void ()(CCommPacket, PacketType), PacketType)' sin definir

您需要将每个 .cc 文件(其中包括一些头文件 - 包括重复包含从其他地方包含的头文件)编译成目标代码。这可以通过单个编译命令完成,该命令还将对象links 转换为可执行文件;或者您可以单独编译每个 .cc 文件,然后 link 它们一起编译。

编译时,某些函数未定义不是问题 - 它们应该源自其他已编译对象,并在 linking 期间被发现。

(因为您没有具体说明您尝试构建可执行文件的方式,所以我不能说得更具体。)