我在Qt中创建了一个类。但是一切都在工作,直到我构建了一个tablemodel类。我现在收到错误"expected ( before * token
“和"Creator does not name a type"
。
有什么问题?这看起来很神秘。
#ifndef OPENMODEL_H
#define OPENMODEL_H
#include <QAbstractTableModel>
#include <QString>
#include <QObject>
#include "creator.h"
namespace language
{
class OpenModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit OpenModel(Creator* creator, QObject *parent = 0); // Creater* throws a expected ) before * token
// QAbstractTableModel Model view functions
int rowCount(const QModelIndex &parent = QModelIndex()) const ;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
// QAbstractTableModel Model edit functions
bool setData(const QModelIndex & index, const QVariant & value, int role);
Qt::ItemFlags flags(const QModelIndex &index) const;
// Functions to manipulate creator
void add(QString name, QString file);
void remove(int index);
// Functions to move files up and down
void moveup(int index);
void movedown(int index);
private:
Creator* creator; // Creator does not name a type
};
}
#endif // OPENMODEL_H
这是creator.h
/*
This is the main file for the language-creator
It controls the addition, deletion and change of the centances (files)
It shall be passed by pointer to the models to be proccessed
*/
#ifndef CREATOR_H
#define CREATOR_H
#include <QObject>
#include <QVector>
#include "file.h"
#include "openmodel.h"
#include "setmodel.h"
namespace language
{
class Creator
{
public:
Creator();
void addFile(const File& f); // Adds a file to the vector
bool removeFile(int index); // Remove a file from the vector
bool replaceFile(int index, const File& f); // Replaces a file at index
const QVector<File>* getFiles() const; // Returns a list of the files
OpenModel getOpenModel() const; // Returns a pointer to the open model
SetModel getSetModel() const; // Returns a pointer to the set model
void reset(); // This resets the class to an initialized state
private:
QVector<File> files; // This holds all the files
};
}
#endif // CREATOR_H
答案 0 :(得分:3)
这些头文件之间有一个循环引用。 openmodel.h
包括creator.h
,反之亦然。因此,当creator.cpp
(我假设有这样的文件)被编译时,它会在声明类openmodel.h
之前包含Creator
(请记住#include
表示内容该文件将被粘贴在那里),因此你得到错误。
为避免这种情况,您可以从#include "creator.h"
中移除openmodel.h
,然后添加转发声明:
class Creator;
将声明放在课程OpenModel
之前。由于您只在该类中使用指向Creator
的指针,因此可以正常工作。
答案 1 :(得分:0)
您的creator.h
文件包含openmodel.h
,Creator
使用createor.h
标识符,class Creator;
之前已对其进行了更改。
在openmodel.h
中添加{{1}}转发声明。