在编写类 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/