开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜