Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ruzik от Март 18, 2012, 14:01



Название: Прототип класса
Отправлено: ruzik от Март 18, 2012, 14:01
Здравствуйте, у меня есть следующий код:
Код:
#ifndef RDATAITEMMODEL_H
#define RDATAITEMMODEL_H
//--------Qt Classes
#include "QStandardItemModel"
class QDomDocument;
//-------

class RDataItemModel : public QStandardItemModel
{
Q_OBJECT
public:
RDataItemModel(QObject *parent = 0);
RDataItemModel(int rows, int columns, QObject * parent = 0);
~RDataItemModel();
};

#endif
Он нормально компилируется и работает, но для более быстрой компиляции, я хочу использовать не include, а прототип класса, то есть
class QStandardItemModel;
Но при компиляции мне выдает 120 ошибок, типа
Ошибка   25   error C2039: index: не является членом "RDataItemModel"   c:\Users\ruzik\Documents\Visual Studio 2008\Projects\RizekFaster\RizekFaster\Classes\RDataItemModel\RDataItemModel.cpp   63
В то время как это запись class QDomDocument; остается полностью рабочей.
И QDomDocument и QStandardItemModel включаются на более верхнем уровне, при то в одном и том же классе.
Почему так происходит?


Название: Re: Прототип класса
Отправлено: kambala от Март 18, 2012, 15:01
нельзя унаследоваться от неизвестного класса


Название: Re: Прототип класса
Отправлено: ruzik от Март 18, 2012, 16:22
Можно, у меня главное окно так сделано:
Код:
#ifndef RIZEKFASTER_H
#define RIZEKFASTER_H
//--------UI
#include "ui_rizekfaster.h"
//--------Qt classes
class QMainWindow;
//-------

class RizekFaster : public QMainWindow, Ui::RizekFasterUi
{
Q_OBJECT
public:
RizekFaster(QWidget *parent = 0, Qt::WFlags flags = 0);
~RizekFaster();
};

#endif // RIZEKFASTER_H
Тут проблем никаких не возникает


Название: Re: Прототип класса
Отправлено: ruzik от Март 18, 2012, 16:24
Хотя, наверно, вы правы, так как в данном случае QMainWindow, подключается вместе с ui_rizekfaster.h, а потом обрабатывается сам rizekfaster.h, то есть класс получается известным
Спасибо за помощь!


Название: Re: Прототип класса
Отправлено: m_ax от Март 18, 2012, 16:32
Хотя, наверно, вы правы, так как в данном случае QMainWindow, подключается вместе с ui_rizekfaster.h, а потом обрабатывается сам rizekfaster.h, то есть класс получается известным
Спасибо за помощь!

Да прав он, прав) И проблема даже не в moc'е, как вы наивно полагали. moc тут не причём)


Название: Re: Прототип класса
Отправлено: ruzik от Март 18, 2012, 21:43
Появилась еще одна проблема этой же тематики:
объявляю прототип класса, а он работать не хочет, как будто самого описания класса нет, хотя вроде все должно работать.
(иерархию классов см в приложенном файле)
RDataItemModel класс в котором и требуется все это заменить, выглядит примерно так:
Код:
#ifndef RDATAITEMMODEL_H
#define RDATAITEMMODEL_H
//--------Qt
#include "QStandardItemModel"
//#include "QtXml" //<-------Если подключить все работает
class QDomDocument;
class QDomNode;
class QDomElement;
//-------

class RDataItemModel : public QStandardItemModel
{
public:
RDataItemModel(QObject *parent = 0);
~RDataItemModel();
};
#endif
Далее rizekfaster.h включает в себя предыдущий класс(RDataItemModel), а так же класс содержащий его.
Далее и rizekfaster.h и standardIncludes.h включаются в main.cpp.
standardIncludes.h представляет из себя(в данный момент) следующее:
Код:
#include "QtCore"
#include "QtGui"
#include "QtXml"