Getting multiple errors creating a model in Qt
I'm creating a class in Qt. But everything was working until I built a tablemodel class. I'm now getting the errors "expected ( 开发者_运维技巧before * token
" and "Creator does not name a type"
.
What's the problem? It seems very cryptic.
#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
this is 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
You have a cyclic reference between these header-files. openmodel.h
includes creator.h
and the other way around. So, when creator.cpp
(I presume there is such a file) gets compiled, it will include openmodel.h
before the class Creator
is declared (remember that #include
means that the contents of the file will be pasted right there), hence you get the error.
To avoid this, you could remove the #include "creator.h"
from openmodel.h
, and instead add a forward declaration:
class Creator;
Put the declaration right before the class OpenModel
. Since you only use pointers to Creator
in that class, this will work fine.
Your creator.h
file includes openmodel.h
which uses the Creator
identifier before createor.h
has had a change to delclare it.
Put a class Creator;
forward declaration in openmodel.h
.
精彩评论