gpt4 book ai didi

c++ - 为什么我的类(class)被认为是抽象的?

转载 作者:行者123 更新时间:2023-11-30 02:21:16 25 4
gpt4 key购买 nike

我想实现一个抽象类,但不能覆盖纯虚函数。出于这个原因,编译器将我的类 AddDialog_av 视为抽象类。

编译器似乎没有看到 AddDialog_av.cpp 文件中的定义。

AddDialog.h(应该是一个抽象类):

class AddDialog : public QDialog
{
Q_OBJECT

public:
AddDialog(QWidget *parent = 0);
virtual ~AddDialog();

protected:
virtual QString generateId()=0;
virtual bool validate()=0;

private slots:
void addButton_clicked();
void cancelButton_clicked();

};

AddDialog_av.h(应该被实例化):

#include <adddialog.h>

class AddDialog_av : public AddDialog
{
public:
AddDialog_av();

};

AddDialog_av.cpp:

#include <adddialog_av.h>

bool AddDialog_av::validate()
{
return true;
}

QString AddDialog_av::generateId()
{
return "Fork out of here.";
}

主要.cpp

#include "adddialog_av.cpp"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AddDialog_av w;
w.show();

return a.exec();
}

错误列表:

adddialog_av.cpp:3: error: no 'bool AddDialog_av::validate()' member function declared in class 'AddDialog_av'
bool AddDialog_av::validate()
^
adddialog_av.cpp:8: error: no 'QString AddDialog_av::generateId()' member function declared in class 'AddDialog_av'
QString AddDialog_av::generateId()
^
main.cpp:7: error: cannot declare variable 'w' to be of abstract type 'AddDialog_av'
AddDialog_av w;
^

最佳答案

您必须在AddDialog_av 类的声明 中告诉编译器覆盖。以您尝试的方式提供实现,即仅在 CPP 文件中指定它是行不通的,因为编译器甚至不知道您的 AddDialog_av 类有 AddDialog_av::generateId( )AddDialog_av::validate 函数放在首位。 AddDialog_av 从基类 AddDialog 继承它们的事实并不意味着您计划在派生类中提供实现。

您还必须将函数添加到头文件中:

class AddDialog_av : public AddDialog
{
public:
AddDialog_av();
protected:
virtual QString generateId();
virtual bool validate();
};

关于c++ - 为什么我的类(class)被认为是抽象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597479/

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