我有非常简单的以下代码:
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();
}
启动窗口.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
主窗口.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 标头中包含 #include "StartWindow.h",因此会产生错误。但是,我认为使用 #ifndef 和 #define 是为了阻止这样的问题吗?有人可以帮我解决这个问题吗?
所谓的“标头防护”用于防止一种不同类型的错误:通过一个编译单元中的不同间接包含多次包含相同的标头。例如,
您包含 main.cpp 中的“a.h”,然后包含 main.cpp 中的“b.h”,其中包含“a.h”本身。
在您的情况下,两个标头尝试循环地相互包含,这是不可能的 - C/C++ 预处理器作为简单的文本“复制粘贴”工作,这种情况会发明文本插入的无限递归。
我真的不明白为什么您需要将“StartWindow.h”包含在“MainWindow.h”标头中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)