Вопрос

PacketBuilder - это маленький класс, который позволяет записывать в массив Char *. Функции Append:

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

Компиляция без ошибок. Если я позвоню приложению и использую T в качестве без знака (Word). Работает отлично. Если я использую T в качестве unsigned Char. Я получаю ошибку линкера.

m_Builder.Append<unsigned char>(0x01); // Error: LNK1120
m_Builder.Append<unsigned short>(0x0001); // Works

Ошибка от VS2010 (Sry I получила немецкий VS2010):

Ошибка lnk2019: verweis auf nicht aufgelöstes extrics auf "" Публичное: void __thiscall packetBuilder :: Добавить (unsigned Char) »(?? $ Append @ E @ PacketBuilder @@ Qaexe @ z)" В Funktion "" Public: void __thiscall Клиент: : Dohandhake (void) "(? Dohandshake @ Client @@ Qaexxz)". 1> C: XXX C ++ SilkRoademu Debug loginserver.exe: Fatal Error LNK1120: 1 Nicht Aufgelöste Externe Verweise.

Перевод на английский:

Ошибка lnk2019: неразрешенный внешний символ "" Публикация: void __thiscall packetbuilder :: Добавить (unsigned char) »(?? $ Append @ E @ PacketBuilder @@ Qaexe @ z)" В функции "" Публикация: void __thiscall Клиент :: dohandshake ( void) "(? Dohandshake @ Client @@ Qaexxz)". 1> C: xxx C ++ silkroademu Debug loginserver.exe: Фатальная ошибка LNK1120: 1 безрешенный внешний символ.

Это было полезно?

Решение

Ваш PacketBuilder не является шаблоном класса, насколько я вижу. PacketBuilder::Append Однако метод шаблона, который требует, чтобы это определение должно быть видно в любой точке создания этого метода. Единственный действительно безопасный способ заверить, что это означает полное определение этого метода шаблона в файл заголовка:

class PacketBuilder {
 // declarations of non-template members

public:
 template <class T> 
 void Append(const T value) 
 { 
  memcpy((&m_Buffer) + m_Index, (const void*) &value, sizeof(T)); 
  m_Index += sizeof(T); 
 }

};

Другие советы

Поместите определение метода в заголовок (файл HPP), а не в файле реализации (CPP).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top