2014-11-03 47 views
0

不能申報多mainwindows在 「main.cpp中」:Qt的錯誤:在main.cpp中

#include "mainwindow.h" 
#include "mainwindow_1.h" 

我的代碼main.cpp中:

MainWindow *mainWin_1 = new MainWindow; 
MainWindow_1 *mainWin_2 = new MainWindow_1; 

我已經宣佈「mainwindow.h」和「mainwindow_1.h」中的MainWindowMainWindow_1。他們都是QMainWindow。但是,當我調試時,我得到一個錯誤,說「MainWindow_1沒有在此範圍內聲明」。

當我改變了:

#include "mainwindow.h" 
#include "mainwindow_1.h" 

#include "mainwindow_1.h" 
#include "mainwindow.h" 

我得到了錯誤 「主窗口並沒有在這個範圍中聲明」。

我只能包含一個主窗口嗎?如何在main.cpp中獲得兩個QMainwindow而沒有錯誤?

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QDateTime> 
#include <ctime> 

class MainWindow : public QMainWindow { 
    Q_OBJECT; 

    public: 
     MainWindow(); 
     ~MainWindow(); 
}; 
#endif 

mainwindow_1.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QDateTime> 
#include <ctime> 

class MainWindow_1 : public QMainWindow { 
    Q_OBJECT; 

    public: 
     MainWindow_1(); 
     ~MainWindow_1(); 
}; 
#endif 
+0

請顯示兩個包含文件。 – hyde 2014-11-03 18:57:02

+0

你可以有兩個不同名稱的類,它們都擴展'QMainWindow',但是不能導入兩個同名的類,不管它們是什麼類。 QtCreator讓你選擇你正在生成的類的名稱 – msrd0 2014-11-03 19:00:12

+0

另一件事,如果文本搜索所有相關的符號,並在某處查看它們是否有錯誤,請在文件中查找。 – hyde 2014-11-03 19:01:20

回答

1

聽起來像是你有同樣包括兩個.h文件後衛宏。

因此,將.h文件之一附近的#ifndef#define附近的位置改爲與另一個.h文件的包含位置不同。 例如改變mainwindow_1.h有這樣的:

#ifndef MAINWINDOW_1_H 
#define MAINWINDOW_1_H 

當你有同樣包括後衛宏,後來包括在該文件中的內容將被跳過,並且在它的類將留在未定義該.cpp文件。

要記住的一件事是,C++包含文件不像「導入」或許多其他語言。 #include只是將其他文件的內容插入到編譯中,就像複製粘貼它一樣。除此之外,這意味着稍後包含文件「看到」早期包含文件中定義的所有宏,因此包含警衛必須具有唯一的名稱。

+0

謝謝,海德。它運行。 – Tony 2014-11-03 19:10:27