Russian Qt Forum
Ноябрь 24, 2024, 12:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прототип класса  (Прочитано 3113 раз)
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 включаются на более верхнем уровне, при то в одном и том же классе.
Почему так происходит?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Март 18, 2012, 15:01 »

нельзя унаследоваться от неизвестного класса
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
ruzik
Гость
« Ответ #2 : Март 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
Тут проблем никаких не возникает
Записан
ruzik
Гость
« Ответ #3 : Март 18, 2012, 16:24 »

Хотя, наверно, вы правы, так как в данном случае QMainWindow, подключается вместе с ui_rizekfaster.h, а потом обрабатывается сам rizekfaster.h, то есть класс получается известным
Спасибо за помощь!
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #4 : Март 18, 2012, 16:32 »

Хотя, наверно, вы правы, так как в данном случае QMainWindow, подключается вместе с ui_rizekfaster.h, а потом обрабатывается сам rizekfaster.h, то есть класс получается известным
Спасибо за помощь!

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
ruzik
Гость
« Ответ #5 : Март 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"
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 23.