gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:33:01 26 4
gpt4 key购买 nike

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

#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

我在这里做错了什么?

最佳答案

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

例如:

virtual double value() = 0;

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

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

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

关于Qt 5 中构造函数的 C++ 抽象类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29888682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com