Если я определил виртуальный деструктор в объявлении класса, какой код требуется в файле реализации (.cpp)? - PullRequest
0 голосов
/ 24 марта 2019

Мне предоставлен файл заголовка, который включает объявление базового класса.В объявлении класса находится виртуальный деструктор, который был определен.Исходя из этого, нам нужно кодировать файл реализации (.cpp).Код выглядит следующим образом в заголовочном файле:

class MyClass
{
private: ...
protected: ...
public:
    MyClass (double aBaseValue = 0.0);
    virtual ~MyClass() { }
    ...
};

Я борюсь с тем, какой код требуется в файле реализации (.cpp) для деструктора.Я подумал, что, поскольку я определил его в объявлении класса, мне не нужно определять его снова в файле реализации, но если я его опущу, то получаю следующую ошибку в объявлении класса при наведении курсора на мой виртуальный деструктор.в определении конструктора в моем файле .cpp.

неопределенная ссылка на `vtable for MyClass '

SO, если я вместо этого добавлю следующий код в исходный файл MyClass :: ~ MyClass (); примерно так

#include "MyClass.h"

MyClass::MyClass(double aBaseValue)
{
    this->fBaseValue = aBaseValue;
{

MyClass::~MyClass();

тогда первые две ошибки исчезают, но теперь я получаю сообщение об ошибке кода деструктора в файле .cpp

объявление 'virtual MyClass :: ~ MyClass ()' вне класса не является определением [-fpermissive]

Из того, что я могу понять, вышеупомянутая ошибка говоритмне, что я в основном пытаюсь объявить деструктор снова, так как нет фигурных скобок ... но если я поставлю фигурные скобки, получит ошибку, сообщающую, что существует переопределение деструктора.

Я не уверен, какие у меня есть другие варианты.Может кто-нибудь помочь мне понять, как я должен реализовывать виртуальный деструктор как для объявления класса, так и для реализации?Благодарю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...