首页 > 解决方案 > 如果我在类声明中定义了虚拟析构函数,那么实现(.cpp)文件中需要什么代码?

问题描述

我得到了一个包含基类声明的头文件。在类声明中是一个已定义的虚拟析构函数。由此,我们需要对实现 (.cpp) 文件进行编码。头文件中的代码如下所示:

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

我正在努力解决的是析构函数的实现(.cpp)文件中需要什么代码。我认为因为我已经在类声明中定义了它,所以我不需要在实现文件中再次定义它,但是如果我将它省​​略,那么当我将鼠标悬停在我的虚拟析构函数上时,我也会在类声明中得到以下错误在我的 .cpp 文件中的构造函数定义上。

未定义对“MyClass 的 vtable”的引用

所以,如果我改为将以下代码添加到源文件MyClass::~MyClass(); 像这样

#include "MyClass.h"

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

MyClass::~MyClass();

然后前两个错误消失了,但现在我在 .cpp 文件中的析构函数代码中得到了一个错误

在类之外声明“虚拟 MyClass::~MyClass()”不是定义 [-fpermissive]

据我所知,上面的错误告诉我,我基本上是在尝试再次声明析构函数,因为没有大括号......但是如果我放大括号,则会出现错误,说明有析构函数的重新定义。

我不确定我的其他选择是什么。有人可以帮我理解我应该如何为类声明和实现实现一个虚拟析构函数吗?谢谢。

标签: c++virtual-destructor

解决方案


推荐阅读