C++ Qt 5 中构造函数的抽象类错误
C++ Abstract Class error on Constructor in Qt 5
我正在创建一个名为 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
,甚至可能创建一个突变函数来设置它。
相关文章:
- 抽象类错误,请参阅声明" "是抽象的
- C++:处理抽象类中的错误时出现问题
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 与 std::unique_ptr 和抽象类关联的编译错误
- 无法实例化抽象类错误
- 错误 - 变量类型 "X" 是一个抽象类 - c++
- 错误消息:不允许抽象类类型 "X" 的对象:纯虚拟"Y"没有覆盖器
- 错误:不允许使用抽象类类型的对象
- 我在代码中有一个错误,错误是:(智能感知:不允许抽象类类型"HourlyWorker"的对象:)
- 如何修复错误C2259:无法实例化抽象类
- 在另一个项目中包括继承的类时,抽象类的链接器错误
- 使用从WINRT网格类派生的抽象类时,Casttobase未解决的外部符号错误
- 抽象类和唯一指针 c++ 错误
- 从另一个抽象类得出一个抽象类时,C 中的类重新定义错误
- 使用std :: make_shared抽象类实例化的错误
- C++ Qt 5 中构造函数的抽象类错误
- C++,无法实例化抽象类错误
- 抽象类出现C++ILink32错误
- 错误 C2259:'CDocument':无法实例化抽象类
- C++ SFML 中的抽象类错误