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

时间:2019-08-19 21:59:07

标签: c++ raspberry-pi header-files undefined-reference

几周前,我开始学习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)的引用

1 个答案:

答案 0 :(得分:0)

您需要将.cc个文件(包括一些头文件-包括从其他位置开始的头文件的重复包含)编译为目标代码。这可以通过单个编译命令来完成,该命令还将对象链接到可执行文件中。或者您可以分别编译每个.cc文件,然后将它们链接在一起。

编译时,未定义某些函数不是问题-它们应该源自其他已编译对象,并且可以在链接期间找到。

(由于您没有确切说明尝试构建可执行文件的方式,因此我无法更具体地说明了。)