为什么我需要在qt中使用前向类声明?

时间:2013-08-10 00:43:38

标签: c++ qt class

在此代码中:

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>

class QPushButton;
class Window : public QWidget
{
public:
    explicit Window(QWidget *parent = 0);
private:
    QPushButton *m_button;
};

#endif // WINDOW_H

为什么我需要转发类QPushButton声明?如果我不那样做会怎么样?因为我删除了那个并且程序已经编译了

这是此标题的.cpp文件:

#include "window.h"

#include <QPushButton>

Window::Window(QWidget *parent) :
    QWidget(parent)
{
    // Set size of the window
    setFixedSize(100, 50);

    // Create and position the button
    m_button = new QPushButton("Hello World", this);
    m_button->setGeometry(10, 10, 80, 30);
}

1 个答案:

答案 0 :(得分:1)

您正在使用类QPushButton声明中指向Window的指针。这就是为什么你在使用它之前必须#include <QPushButton>,或者至少告诉编译器它存在并且在你的代码中使用前向声明进一步声明它。 如果从头文件中删除前向声明没有任何反应是因为它包含或声明之前的某个地方。可能是qwidget.h,其中一个包含的标题正在为您执行此操作...或者在您使用Qt设计器表单的情况下由“Qt用户界面编译器”生成的.h文件。

但正如@chris所说:“不要指望标题包含其他标题。”

明确地做这件事没有额外的工作。