在" 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
和MainWindow_1
和" mainwindow_1.h"。它们都是QMainWindow
。但是当我调试时,我收到一条错误,上面写着" MainWindow_1未在此范围内宣布"。
当我改变时:
#include "mainwindow.h"
#include "mainwindow_1.h"
进入
#include "mainwindow_1.h"
#include "mainwindow.h"
我收到错误" MainWindow未在此范围内宣布"。
我可以只包含一个主窗口吗?如何在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 :(得分:1)
听起来你在两个.h文件中都有相同的包含保护宏。
因此,将其中一个.h文件的开头附近的#ifndef
和#define
更改为与另一个.h文件的包含警卫不同。
例如,将 mainwindow_1.h 更改为:
#ifndef MAINWINDOW_1_H
#define MAINWINDOW_1_H
当你有相同的包含保护宏时,将跳过后面包含的文件的内容,并且其中的类将在该.cpp文件中保持未定义。
要记住的一件事是,C ++包含文件不像“import”或许多其他语言。 #include
只是将另一个文件的内容插入到编译中,就像复制粘贴它一样。除此之外,这意味着稍后包含文件“看到”早期包含文件中定义的所有宏,因此包含警卫必须具有唯一名称。