Здесь поздно ночью, и я схожу с ума, пытаясь решить ошибку компоновщика.Неразрешенный символ при наследовании интерфейса
Если у меня есть следующий абстрактный интерфейс:
class IArpPacketBuilder
{
public:
IArpPacketBuilder(const DslPortId& aPortId);
virtual ~IArpPacketBuilder();
// Other abstract (pure virtual methods) here...
};
и я его экземпляр так:
class DummyArpPacketBuilder
: public IArpPacketBuilder
{
public:
DummyArpPacketBuilder(const DslPortId& aPortId)
: IArpPacketBuilder(aPortId) {}
~DummyArpPacketBuilder() {}
};
почему я получаю следующее сообщение об ошибке при компоновке?
Unresolved symbol references:
IArpPacketBuilder::IArpPacketBuilder(DslPortId const&):
ppc603_vxworks/_arpPacketQueue.o
IArpPacketBuilder::~IArpPacketBuilder():
ppc603_vxworks/_arpPacketQueue.o
typeinfo for IArpPacketBuilder:
ppc603_vxworks/_arpPacketQueue.o
*** Error code 1
IArpPacketBuilder
является абстрактным интерфейсом, так что до тех пор, как я определить конструктор и разрушение в бетоне (производный) интерфейс, я должен быть тонкой, нет? Ну, похоже, нет.
Я смог наследовать этот интерфейс в другой библиотеке без проблем, поэтому не думал, что это будет проблемой. Нужно ли определять их в абстрактном интерфейсе? – LeopardSkinPillBoxHat
@ Leopard, интересный. Я думал, что это не сработает - если вы явно объявите конструктор/деструктор, компилятор не будет автоматически генерировать его для вас автоматически. Обратите внимание, что C++ не имеет понятия _abstract interface_ - ваш класс является простым классом с некоторыми чистыми виртуальными методами, что делает невозможным его непосредственное создание. –
Спасибо, я заработал, определяя тела ctor и dtor, но я до сих пор не могу понять, почему он работал в другой библиотеке, когда я не определил ctor и dtor. – LeopardSkinPillBoxHat