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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как унаследовать класс от QObject?  (Прочитано 15540 раз)
dr_Begemot
Гость
« : Апрель 23, 2009, 16:46 »

Как унаследовать класс от QObject?
Видимо я что-то не сделал, т.к. компилятор пишет: error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'

вот класс:
Код:
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass();
           //...
};
Записан
alex12
Гость
« Ответ #1 : Апрель 23, 2009, 16:51 »

QObject::QObject() закрытый, а QObject::QObject( QObject *parent=0 ) открытый конструктор.

Код
C++ (Qt)
class MyClass : public QObject
{
 Q_OBJECT
public:
 MyClass( QObject *parent = 0 );
 //...
};
 
...
 
MyClass::MyClass(  QObject *parent )
 : QObject( parent )
{
}
 
« Последнее редактирование: Апрель 23, 2009, 16:58 от alex12 » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Апрель 23, 2009, 20:31 »

>>Видимо я что-то не сделал,

2 dr_Begemot, ты видимо в реализации конструктора пишешь так:
MyClass::MyClass( )  : QObject()
тогда можешь написать так:
MyClass::MyClass( )  : QObject(0)

Объяснение тебе уже написали, и пример более правильный:
>>QObject::QObject() закрытый
Записан

Юра.
dr_Begemot
Гость
« Ответ #3 : Апрель 24, 2009, 08:34 »

Переделал так:

Код:
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass( QObject *parent = 0 );
           //...
};

в реализации:
Код:
MyClass::MyClass(QObject *parent) : QObject(parent){
//...
}

все равно та же ошибка Грустный
Записан
Steven_Orko
Гость
« Ответ #4 : Апрель 24, 2009, 08:58 »

Тогда приведи содержимое файла полностью, ат акже и весь вывод ошибки (+-10 строк от той, что указывает на использование закрытого метода).
Записан
dr_Begemot
Гость
« Ответ #5 : Апрель 24, 2009, 09:14 »

Тогда приведи содержимое файла полностью, ат акже и весь вывод ошибки (+-10 строк от той, что указывает на использование закрытого метода).

Решил проблему.

Надо было добавить такую строчку в класс
private:
   Q_DISABLE_COPY(MyClass)
Записан
alex12
Гость
« Ответ #6 : Апрель 24, 2009, 15:17 »

Цитировать
Q_DISABLE_COPY(MyClass)

Странно... У меня собрался просто так: ( MinGW Qt4.5.0 )

Код
C++ (Qt)
#ifndef __MY__
#define __MY__
 
#include <QtGui>
 
class MyClass : public QObject
{
 Q_OBJECT
public:
 MyClass( QObject *parent = 0 );
};
#endif
 
Код
C++ (Qt)
#include <QtGui>
 
#include "main.h"
 
MyClass::MyClass(  QObject *parent )
 : QObject( parent )
{
}
 
int main( int argc, char **argv )
{
 MyClass myclass;
}
 
Записан
ритт
Гость
« Ответ #7 : Апрель 26, 2009, 02:24 »

а при чём тут Q_DISABLE_COPY(MyClass) ?
и вопрос на засыпку - что делает и для чего предназначен макрос Q_DISABLE_COPY ?)
Записан
spbtellurian
Гость
« Ответ #8 : Июнь 08, 2009, 11:22 »

что делает и для чего предназначен макрос Q_DISABLE_COPY ?)

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0
Записан
spirit
Гость
« Ответ #9 : Июнь 08, 2009, 11:25 »

что делает и для чего предназначен макрос Q_DISABLE_COPY ?)

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0
это был риторический вопрос к автору  Подмигивающий
Записан
ритт
Гость
« Ответ #10 : Июнь 08, 2009, 11:26 »

что делает и для чего предназначен макрос Q_DISABLE_COPY ?)

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0
запрещает сАздОвать больше одного экземпляра? каким же это образом? блокирует вызов new? %)
Записан
spirit
Гость
« Ответ #11 : Июнь 08, 2009, 11:33 »

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0

к тому же
Цитировать
Q_DISABLE_COPY ( Class )

Disables the use of copy constructors and assignment operators for the given Class.
или код макроса глянь.
Записан
BRE
Гость
« Ответ #12 : Июнь 08, 2009, 11:34 »

или код макроса глянь.
Даже в assistant'е все расписано с примерами.  Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #13 : Июнь 08, 2009, 11:46 »

что делает и для чего предназначен макрос Q_DISABLE_COPY ?)

запрещает саздовать больше одного экземпляра. В наличии начиная с версии Qt 4.4.0

это ты с умными синглетонами перепутал Улыбающийся
Записан
ритт
Гость
« Ответ #14 : Июнь 08, 2009, 13:37 »

кстати (но не в тему), возможно, в 4.6 появится QSingleton Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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