C++ Qt 5 中构造函数的抽象类错误

C++ Abstract Class error on Constructor in Qt 5

本文关键字:抽象类 错误 构造函数 Qt C++      更新时间:2023-10-16

我正在创建一个名为 Asset 的简单抽象类,标头代码如下所示:

#ifndef ASSET_H
#define ASSET_H
#include <QString>
#include <QDate>
class Asset
{  
public:
    Asset(QString des, QDate dat);
    ~Asset();
    virtual QString toString();
    virtual double value();
    QString getDescription();
private:
    QString description;
protected:
    QDate date;
};
#endif // ASSET_H

这是我的实现文件的样子:

#include "asset.h"
Asset::Asset(QString des, QDate dat)
{
    description = des;
    date = dat;
}
QString Asset::getDescription()
{
    return description;
}

我在实现构造函数上得到的错误代码是:undefined reference to vtable for Asset

我在这里做错了什么?

你没有在抽象类中实现的方法,应该是纯virtual方法。这意味着它们后面应该跟着= 0

例如:

virtual double value() = 0;

这告诉编译器这是一个纯虚拟方法。有关虚拟方法和纯虚拟方法之间区别的解释,请查看以下 Stackoverflow 答案: C++ 虚拟/纯虚拟解释

附带说明一下。当你有一个抽象类时,你应该真正确保你的析构函数是虚拟的。在处理要从中继承的类时,请始终在C++中使用虚拟析构函数。

在类设计中,您有一个名为 description 的私有成员,以及一个用于获取非虚拟说明的公共函数。您没有设置描述的方法,也许您应该考虑将描述成员变量从private移动到protected,甚至可能创建一个突变函数来设置它。