Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Alf от Сентябрь 12, 2011, 17:09



Название: приведение типа к QObject* ?
Отправлено: Alf от Сентябрь 12, 2011, 17:09
Существует иерархия классов:

Код
C++ (Qt)
class B : public A {...};
class A : public QObject {...};
 
class X : public QObject {...};

Где-то соединяю сигнал со слотом:

Код
C++ (Qt)
QObject::connect( myX, SIGNAL(...),
                 myB, SLOT(...) );

myX - указатель на объект класса X
myB - указатель на константный объект класса B

Вопрос: почему компилятор ругается следующим образом ?

Цитировать
ошибка: C2664: 'bool QObject::connect(const QObject *,const char *,const QObject *,const char *,Qt::ConnectionType)' :
cannot convert parameter 3 from 'const B *' to 'const QObject *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Т.е. почему компилятор не в состоянии автоматически выполнить приведение типа к 'const Object *', если класс B унаследован от QObject ? Другими словами, я не понимаю, почему это они 'unrelated' ?

Естественно, прямое приведение типа помогает:

Код
C++ (Qt)
QObject::connect( myX, SIGNAL(...),
                 (const QObject*)myB, SLOT(...) );

Компилятор - MS VC 2008.


Название: Re: приведение типа к QObject* ?
Отправлено: SASA от Сентябрь 12, 2011, 17:30
А в месте конекта виден ашник с классом B.


Название: Re: приведение типа к QObject* ?
Отправлено: shirushizo от Сентябрь 13, 2011, 08:26
Код:
class A : public QObject
{
  Q_OBJECT
  ...
}
Не забыл случаем?


Название: Re: приведение типа к QObject* ?
Отправлено: Alf от Сентябрь 13, 2011, 10:31
Цитировать
А в месте конекта виден ашник с классом B.
Точно ! В месте коннекта не было видно объявление класса ! Спасибо !