错误:' abc'没有名称类型QT c ++ GUI应用程序

时间:2014-12-10 15:59:15

标签: c++ forms qt user-interface

底线是我有2个表格,第一个主窗口第2表格1。我在主窗口上有一个按钮,显示表格2。现在我在form1上有一个按钮,应该把我带到主窗口,但它不起作用。问题是,当我在form1.h中说#include时,它给了我一个错误,即mainwindow没有名称类型。请帮忙,如果可能的话,工作示例会很棒。实际错误是MainWindow没有名称类型

mainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <form1.h>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;   // i put this line of code in public section when i was trying ui->show(); in form1.cpp file 

    Form1 obj ; // to show next form

};

#endif // MAINWINDOW_H

mainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }

MainWindow::~MainWindow()
    {
        delete ui;
    }

void MainWindow::on_pushButton_clicked()
    {
        obj.show();
        this->hide();
    }

Form1.h

  #ifndef FORM1_H
#define FORM1_H
#include <QWidget>

#include<mainwindow.h>

namespace Ui {
    class Form1;
}

class Form1 : public QWidget
{
    Q_OBJECT

public:
    explicit Form1(QWidget *parent = 0);
    ~Form1();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Form1 *ui;

    MainWindow mw ;     // here i am making object of main window
};

#endif // FORM1_H

form1.cpp

#include "form1.h"
#include "ui_form1.h"

#include<mainwindow.h>   // i know when i include this there this issue occurs , but i want to go my previous form to show and for that i have to make its object ! thats how it works when i am going to my next form i.e form1 now i want to go back 



Form1::Form1(QWidget *parent) :
QWidget(parent),

ui(new Ui::Form1)
{
    ui->setupUi(this);
}

Form1::~Form1()
{
    delete ui;
}

void Form1::on_pushButton_clicked() // show mainWindow
{
    mw->show();
    this->hide();
    //MainWindow::ui->show();        // i even tried this
}

我也试过,如果我可以在没有在form1.h中包含mainwindow.h的情况下通过puttin Ui :: MainWindow * ui;在公共部分,所以form1.cpp文件,我可以通过输入MainWindow :: ui-&gt; show();这次ERROR说对象丢失参考&#39; MainWindow :: ui&#39;

1 个答案:

答案 0 :(得分:1)

您在班级MainWindowForm1之间存在循环依赖关系。因此,您form1.h中的mainwindow.hmainwindow.h中的form1.h包括MainWindow mw ; // here i am making object of main window 。当编译器到达

行时
MainWindow

这是他第一次遇到符号mw并触发该错误。

我仍然不明白为什么MainWindow* mw ; 是Form1的成员,但您可以使用指针来破坏依赖关系。基本上你现在有

#include<mainwindow.h>

而不是Form1.h中的class MainWindow; ,您只需要转发声明

{{1}}