c++ - 如果我在类声明中定义了虚拟析构函数,那么实现(.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]
据我所知,上面的错误告诉我,我基本上是在尝试再次声明析构函数,因为没有大括号......但是如果我放大括号,则会出现错误,说明有析构函数的重新定义。
我不确定我的其他选择是什么。有人可以帮我理解我应该如何为类声明和实现实现一个虚拟析构函数吗?谢谢。
解决方案
推荐阅读
- python - 如何自定义刻度?
- html - 格式化表单域
- r - Reshape data wide-to-long, preserve variable order in `varying`
- javascript - 在 .each 函数中等待 $.ajax 结果
- python - 加载具有自定义注意层的 keras 模型时出现未知层错误
- google-oauth - Google 管理控制台使用旧页面令牌和新身份验证令牌
- javascript - 如何将数组从 Textarea 发布到 mongoDB?
- javascript - 返回特定用户 nodejs api 的数据
- python - 在 Tensorflow 中标准化数据的最佳方法是什么?
- php - tFPDF 生成一个空的 pdf 文件