继承错误
Inheritance Error
我制作了以下程序,但现在我遇到了一个错误。我搜索了将近3个小时的错误,但毫无价值。我想和你们讨论一下这个问题。我得到错误:在"{"标记之前需要类名
#ifndef ASKDIALOG_H
#define ASKDIALOG_H
#include <QDialog>
#include "umerwindow.h"
namespace Ui {
class AskDialog;
}
class AskDialog : public QDialog, public UmerWindow // HERE IS THE ERROR
{
Q_OBJECT
public:
explicit AskDialog(QWidget *parent = 0);
void showdialog();
~AskDialog();
private slots:
void on_dokbutton_clicked();
private:
Ui::AskDialog *ui;
};
#endif // ASKDIALOG_H
询问对话框.CPP文件
#include "askdialog.h"
#include "ui_askdialog.h"
AskDialog::AskDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::AskDialog)
{
ui->setupUi(this);
}
AskDialog::~AskDialog()
{
delete ui;
}
void AskDialog::on_dokbutton_clicked()
{
QString data=ui->dline->text();
showlist(data);
}
询问对话框.CPP文件
#include "askdialog.h"
#include "ui_askdialog.h"
AskDialog::AskDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::AskDialog)
{
ui->setupUi(this);
}
AskDialog::~AskDialog()
{
delete ui;
}
void AskDialog::on_dokbutton_clicked()
{
QString data=ui->dline->text();
showlist(data);
}
好的,这是UmerWindow 的头文件
#ifndef UMERWINDOW_H
#define UMERWINDOW_H
#include <QMainWindow>
#include <QListWidgetItem>
#include "askdialog.h"
namespace Ui {
class UmerWindow;
}
class UmerWindow : public QMainWindow
{
Q_OBJECT
public:
explicit UmerWindow(QWidget *parent = 0);
~UmerWindow();
protected:
void showlist(QString &);
private slots:
void on_actionAdd_Item_triggered();
private:
Ui::UmerWindow *ui;
QListWidgetItem *itm;
AskDialog *dialog;
};
这是UmerWIndow 的.cpp文件
#include "umerwindow.h"
#include "ui_umerwindow.h"
#include "askdialog.h"
#include <QListWidgetItem>
UmerWindow::UmerWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::UmerWindow)
{
ui->setupUi(this);
dialog= new AskDialog(this);
}
UmerWindow::~UmerWindow()
{
delete ui;
}
void UmerWindow::on_actionAdd_Item_triggered()
{
dialog->show();
}
void UmerWindow::showlist(QString &data)
{
}
我该怎么办才能解决这个问题?请帮忙。
PS:我也尝试过不继承,然后编译器给了我一个奇怪的错误:ISO C++禁止声明没有类型的"UmerWindow"和错误,应为";"当我在askdialog.h文件中创建UmerWindow的指针对象时,在''标记*之前。现在我该怎么办?
根据您的说法,UmerWindow基本上是Qt创建者创建的典型MainWindow,您可能知道QMainWindow继承了QObject,QDialog也是如此。
因此,类AskDialog继承自两个QObject子类QDialog和UmerWindow。不支持此操作!
看起来像是一个经典的循环引用问题。您已经在umerwindow.h文件中完成了此操作。
#include "askdialog.h"
问题是,在前向声明UmerWindow之前,您已经执行了。因此,askdialog.h中的#include"umerwindow.h"没有任何影响(因为#define已经创建)。
请在umerwindow.h中转发声明类AskDialog,而不是#include。
错误:在"{"标记之前需要类名
从我的远程错误解决技能来看,我觉得你在继承时给出了错误的类名。检查类名是UmerWindow
还是umerWindow
,或者是umerwindow
还是Umerwindow
。编译器在继承时无法理解您的案例中的标识符UmerWindow
。转到标题"umerwindow.h"
,看看类名到底是什么。
编译器似乎不知道类UmerWindow
。你试过提前申报吗?只需在include语句下面添加类定义:
#include "umerwindow.h"
class UmerWindow;
此外,如果它是由Qt创建的类,那么它可能在Ui命名空间中。在这种情况下,请尝试在类声明中使用全名:
class AskDialog : public QDialog, public Ui::UmerWindow
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 在 c++ 中拆分类和标头中的继承,错误
- enable_if继承的成员函数的名称查找错误
- C++模板类 - 继承调用错误的函数
- C++ 中的构造函数、继承、堆栈、堆、this-pointer 和段错误
- 为什么这个混合继承程序给出错误的输出?
- 使用多重继承时出现编译错误
- 多级继承错误 C2280:"atttempting to reference a deleted function"
- 相对于继承的构造函数,gcc 编译器是否还有一个错误?
- 从模板继承的 MSVC DLL 导出类会导致LNK2005已定义的错误
- 模板化类继承的子类定义中的错误
- C++错误LNK2005和不同项目文件的常规继承
- 错误:'int_type'未命名类型 - 如何继承 typedefs 和用法
- 在 soap_ssl_server_context(..) 中使用继承时 gsoap 中的分段错误
- C++中的继承,"...is an ambiguous base of ..."错误
- 与lambda一起使用虚拟继承在初始化列表中捕获此问题的GCC错误
- 收到未定义的引用错误 c++ 继承/多态性
- c++错误:继承转换无效
- 错误继承不能访问c++的方法