继承错误

Inheritance Error

本文关键字:错误 继承      更新时间:2023-10-16

我制作了以下程序,但现在我遇到了一个错误。我搜索了将近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