我有非常简单的以下代码:
main.cpp
#include "ui_library_browser.h"
#include <QtGui/QApplication>
#include "StartWindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StartWindow w;
w.show();
return a.exec();
}
StartWindow.h
#ifndef STARTWINDOW_H_
#define STARTWINDOW_H_
#include <qwidget>
#include "MainWindow.h"
class StartWindow : public QWidget
{
Q_OBJECT
public:
StartWindow();
~StartWindow();
MainWindow main_window; //<-- Problem
};
#endif
MainWindow.h
#ifndef MAINWINDOW_H_
#define MAINWINDOW_H_
#include <qdialog.h>
#include "StartWindow.h"
class MainWindow : public QDialog
{
Q_OBJECT
public:
MainWindow();
~MainWindow();
};
#endif
由于在MainWindow.h header 中包含#include“StartWindow.h”,因此会产生错误。但是,我认为使用#ifndef和#define可以阻止此类问题?有人可以帮我清理一下吗?
最佳答案
所谓的“头保护器”用于防止某种不同的错误:通过一个编译单元中的不同间接包含多次包含相同的头。例如,
您可以包含来自main.cpp的“a.h”,然后包含来自main.cpp的“b.h”,其中包含“a.h”本身。
在您的情况下,两个 header 试图在圆周上互相包含,这是不可能的-C / C++预处理器作为简单的文本“复制粘贴”工作,这种情况将发明无限的文本插入递归。
而且我真的不明白为什么您需要在“MainWindow.h” header 中包含“StartWindow.h”。