Ошибка наследования - PullRequest
       1

Ошибка наследования

0 голосов
/ 25 февраля 2012

Я сделал следующую программу, но теперь получаю ошибку. Я искал ошибку почти 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;
};

и это .cpp файл UmerWIndow

#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' без типа и ошибка: ожидается ';' до '' токена *, когда я создаю объект-указатель UmerWindow в файле askdialog.h. Что мне теперь делать?

Ответы [ 4 ]

2 голосов
/ 25 февраля 2012

По вашему мнению, UmerWindow - это типичное MainWindow, которое создает создатель Qt, и вы, возможно, знаете, что QMainWindow наследует QObject, и то же самое имеет место в случае QDialog.

Итак, класс AskDialog наследует от двух подклассов QObject QDialogи UmerWindow.Это не поддерживается!

1 голос
/ 25 февраля 2012

Похоже на классическую круговую справочную задачу.Вы сделали это в файле umerwindow.h.

#include "askdialog.h"

Проблема в том, что вы сделали это до объявления объявления UmerWindow.Таким образом, #include "umerwindow.h" в askdialog.h не имеет никакого эффекта (из-за того, что #define уже создан).

Вместо этого #include, просто объявите класс AskDialog в umerwindow.h.

0 голосов
/ 25 февраля 2012

Кажется, компилятор не знает класс UmerWindow.Вы пытались объявить это вперёд?Просто добавьте определение класса ниже оператора include:

#include "umerwindow.h"    
class UmerWindow;

Также, если это класс, созданный Qt, он может находиться в пространстве имен Ui.В этом случае попробуйте использовать полное имя в объявлении класса:

class AskDialog : public QDialog, public Ui::UmerWindow
0 голосов
/ 25 февраля 2012

ошибка: ожидаемое имя класса до '{' токена

Из моих навыков удаленного устранения ошибок я чувствую, что вы даете неправильное имя класса при наследовании.Проверьте, является ли имя класса UmerWindow или umerWindow или umerwindow или Umerwindow.Компилятор не понимает идентификатор UmerWindow в вашем случае при наследовании.Перейдите в заголовок "umerwindow.h" и посмотрите, что именно является именем класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...