c++ - Qt 前向声明产生错误

标签 c++ qt qt4

在编写类 TemplateHandler 时,假设我使用 TemplateHandler.h(用于 header )和 TemplateHandler.cpp(用于声明)。喜欢

// Templatehandler.h

#ifndef TEMPLATEHANDLER_H
#define TEMPLATEHANDLER_H

#include <QObject>   // Forward declaration of QObject generates error

class QListView;     // Forward declarations
class QTextEdit;
class QModelIndex;
class QStringListModel;

class TemplateHandler : public QObject
{
  Q_OBJECT
  public:
    TemplateHandler(QListView *view, QTextEdit *textEdit, QObject *parent);
    virtual ~TemplateHandler();

  private:
    QTextEdit *mTextEdit;
    QStringListModel *mModel;
};

#endif

来源

#include "templatehandler.h"
#include <QListView>             // Inclusion of lib
#include <QTextEdit>
#include <QObject>
#include <QStringListModel>

TemplateHandler::TemplateHandler(QListView *view, QTextEdit *textEdit, QObject *parent) : QObject(parent), mTextEdit(textEdit)
{
    mModel = new QStringListModel(this);
    QStringList templates;
    templates << "<html>" << "</html>" << "<body>" << "</body>";
    mModel->setStringList(templates);
    view->setModel(mModel);
    connect(view, SIGNAL(clicked(const QModelIndex&)), SLOT(insertText(const QModelIndex&)));
}

TemplateHandler::~TemplateHandler() {
    // TODO Auto-generated destructor stub
}

但在这种情况下,QObject 的前向声明会产生错误,但其余的都正常。我需要一些帮助。

最佳答案

这是一个纯 C++“问题”。

仅当编译器在包含 header 时不需要类的大小时,前向声明才起作用。例如。对于指针,即使是类,它也知道大小。

另一方面,对于在堆栈上创建的对象或父类,它需要知道结构的确切大小(例如 sizeof(QObject)),它只能通过包括 .h

关于c++ - Qt 前向声明产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9699251/

相关文章:

c++ - 对 A::funcA(int) 的 undefined reference

c++ - 在多个 DLL 中注册常见的 Qt 元类型

c# - 将 Qt GUI 代码集成到 C# 中

c++ - Qt 程序在 QPainter::drawPixmap() 上崩溃

windows - QNetworkRequest 不工作

python - 无法在 python (3.4) 中加载 dll 文件

c++ - 如何修复 'Could not load the Qt platform plugin "xcb“在 ""中,即使它已被发现。”在fixup_bundle宏之后?

c++ - C++中的高性能递归函数

qt - 错误 C2280 : 'QQmlPrivate::QQmlElement<T>::QQmlElement(void)' : attempting to reference a deleted function

QtWebKit - 如何显示数据库中的二进制图像?