我有一个具有模板类型的基类。我明确地重写了子类中的这个模板类型,因为该子类只能在它为其设计的类型上运行。然而,这会导致链接器错误。我在基类中有两个函数,一个是提供的,因为它对所有子类都是通用的。另一个函数纯粹是虚函数,意味着被子类重写。我可以编译和链接第二个函数就好了,但是链接第一个函数会导致错误:
error LNK2019: unresolved external symbol "public: bool __thiscall BaseDecoder<class APacket>::unpack(class std::vector<unsigned char,class std::allocator<unsigned char> > const &,class std::vector<class Frame,class std::allocator<class Frame> > &)"
此消息有意义,因为没有BaseDecoder<APacket>
实现解包功能,只有BaseDecoder<class PacketType
&gt;实施
这是我的班级结构:
基类:
template <class PacketType>
class BaseDecoder {
public:
BaseDecoder(){};
virtual ~BaseDecoder(){};
bool unpack(const std::vector<uint8_t>& traceData, std::vector<Frame>& frameData);
virtual bool decode(std::vector<Frame>& frameData, std::vector<PacketType>& packetData) = 0;
}
派生类:
class ADecoder : public BaseDecoder<APacket> {
public:
ADecoder();
~ADecoder();
bool decode(std::vector<Frame>& frameData, std::vector<APacket>& packetData) override;
}
主:
std::vector<uint8_t>* raw_data = getRawData();
std::vector<Frame> frame_data;
a_decoder->BaseDecoder::unpack(*raw_data, frame_data);
std::vector<APacket> a_packets;
a_decoder->decode(frame_data, a_packets);
如何才能将BaseDecoder<APacket> unpack()
与BaseDecoder<class PacketType> unpack()
相关联,因为该功能实际上并未触及模板类型?