为什么我的课被认为是抽象的
Why is my class considered abstract?
我想实现一个抽象类,但不能覆盖纯粹的虚函数。出于这个原因,编译器将我的类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();
};
<</div>
div class="answers"> 如果你有 =0,你必须派生和实现基类 AddDialog。所以添加
class MyAddDialog : public AddDialog
{
protected:
QString generateId(){
qDebug() << "works :)";
};
virtual bool validate(){
qDebug() << "works to :) :)";
};
};
并使用:
MyAddDialog myAddDialog;
在代码中。然后它将运行。不要声明
AddDialog addDialog; // it will not works!!!!
相关文章:
- 抽象类错误,请参阅声明" "是抽象的
- 为什么rand()的使用被认为是不好的
- 为什么const char*和const char[]作为函数参数被认为是等价的
- 这会被认为是糟糕的编程实践吗?
- 为什么这被认为是恒定的?
- 观察者模式:为什么主题应该是抽象的?
- 这被认为是有效的C 11还是C 14?还是GCC/Clang弄错了
- 派生类仍然是抽象的
- 确保课程不是抽象的
- 为什么我的课被认为是抽象的
- 像这样的 for 循环被认为是不好的做法吗?
- 为什么在C 中使用索引运算符被认为是不好的样式
- 确实被认为是实验性的 - 静态反射功能包括对母类的迭代
- 平衡括号 - 堆栈未被认为是空的
- 不能分配抽象类型的对象 - 但类不是抽象的!(C++)
- C sqlite3插入或替换查询我认为是错误的
- 如何在编译时间检查课程,是否是抽象的
- 为什么编译器认为这个类是抽象的(C++)
- 为什么我的子类被认为是抽象类
- 一个没有纯虚方法的c++类可以被认为是抽象的吗?