Существует иерархия классов:
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.