带有模板的C++ Packet Builder

Aur*_*rus 0 c++ linker-errors packet memcpy

PacketBuilder是一个允许写入char*数组的类.附加功能:

template <class T>
void PacketBuilder::Append(const T value)
{
 memcpy((&m_Buffer) + m_Index, (const void*) &value, sizeof(T));
 m_Index += sizeof(T);
}
Run Code Online (Sandbox Code Playgroud)

编译没有错误.如果我调用Append并使用T作为无符号短(WORD).它很棒.如果我使用T作为unsigned char.我收到链接器错误.

m_Builder.Append<unsigned char>(0x01); // Error: LNK1120
m_Builder.Append<unsigned short>(0x0001); // Works
Run Code Online (Sandbox Code Playgroud)

来自VS2010的错误(我得到了德国vs2010):

错误LNK2019:Verweis aufnichtaufgelöstesexternes符号""public:void __thiscall PacketBuilder :: Append(unsigned char)"(?? $ Append @ E @ PacketBuilder @@ QAEXE @ Z)"在Funktion中""public:void __thiscall客户端: :DoHandshake(无效)"(?DoHandshake @ Client @@ QAEXXZ)".1> C:\ XXX\C++\SilkroadEmu\Debug\LoginServer.exe:致命错误LNK1120:1nichtaufgelösteexterneVerweise.

翻译成英文:

错误LNK2019:未解析的外部符号""public:void __thiscall PacketBuilder :: Append(unsigned char)"(?? $ Append @ E @ PacketBuilder @@ QAEXE @ Z)"in Function""public:void __thiscall Client :: DoHandshake(无效)"(?DoHandshake @ Client @@ QAEXXZ)".1> C:\ XXX\C++\SilkroadEmu\Debug\LoginServer.exe:致命错误LNK1120:1未解析的外部符号.

BЈо*_*вић 5

将方法定义放在标头(hpp文件)中,而不是在实现(cpp)文件中.

  • @Aurus:定义包括整个函数体,如大括号之间的代码(`{...}`).你所拥有的只是函数*声明*.您需要在头文件中包含整个函数定义. (3认同)