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

Siy*_*alo 2 c++ constructor abstract-class qt5

我正在创建一个名为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
Run Code Online (Sandbox Code Playgroud)

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

#include "asset.h"

Asset::Asset(QString des, QDate dat)
{
    description = des;
    date = dat;
}

QString Asset::getDescription()
{
    return description;
}
Run Code Online (Sandbox Code Playgroud)

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

我在这做错了什么?

Tom*_*sen 5

您未在抽象类中实现的方法应该是纯virtual方法.这意味着他们应该紧随其后= 0.

例如:

virtual double value() = 0;
Run Code Online (Sandbox Code Playgroud)

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

在旁注.当你有一个抽象类时,你应该确保你的析构函数是虚拟的.在处理要继承的类时,始终在C++中使用虚拟析构函数.

在您的类设计中,您有一个名为description的私有成员,以及一个公共函数来获取非虚拟的描述.您没有设置描述的方法,也许您应该考虑将描述成员变量移动privateprotected或甚至创建一个mutator函数来设置它.