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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: приведение типа к QObject* ?  (Прочитано 2848 раз)
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.
Записан
SASA
Гость
« Ответ #1 : Сентябрь 12, 2011, 17:30 »

А в месте конекта виден ашник с классом B.
Записан
shirushizo
Гость
« Ответ #2 : Сентябрь 13, 2011, 08:26 »

Код:
class A : public QObject
{
  Q_OBJECT
  ...
}
Не забыл случаем?
Записан
Alf
Гость
« Ответ #3 : Сентябрь 13, 2011, 10:31 »

Цитировать
А в месте конекта виден ашник с классом B.
Точно ! В месте коннекта не было видно объявление класса ! Спасибо !
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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