Ошибка invalid conversion from `QWidget*' to `QComboBox*' |
Здравствуйте, гость ( Вход | Регистрация )
Ошибка invalid conversion from `QWidget*' to `QComboBox*' |
kwisp |
16.9.2010, 22:00
Сообщение
#21
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
это не пример. Во первых, АДРЕС не поменяется от этого. Во вторых, для таких случаев должен быть виртуальный деструктор, либо ты уж учитывай, какой тип удаляется и приведи его перед удалением адресс не поменяется, поменяется "значение указателя" ведь он тем или иным способом хранит информацию о ТИПЕ! при приведении типов старым способом компилер должен переберать сначала static_cast если не уместно то reinterpret_cast потом может взять dynamic_cast. чаще всего берется reinterpret_cast не проверяются типы и т.д. т т.п. |
|
|
BRE |
16.9.2010, 22:06
Сообщение
#22
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
я вредное, я знаю... Но пока не увидел убедительных объяснений обязаловки применения каста Давай смотреть.
Сишное преобразование ничего не контролирует, с его помошью я могу преобразовать QString к QWidget, последствия правда будут не хорошие. Насчет корректировки адреса указателя. Попробуй с теми же классами выполнить следующие преобразования:
И посмотри как будет меняться указатель. Кстати сишные преобразования тоже так умеют. |
|
|
DEADHUNT |
16.9.2010, 22:10
Сообщение
#23
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
Сишное преобразование ничего не контролирует, с его помошью я могу преобразовать QString к QWidget, последствия правда будут не хорошие. в принципе всё контролирует кроме dynamic_cast Цитата 5.4 Explicit type conversion (cast notation) [expr.cast] 1 The result of the expression (T) cast-expression is of type T. The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type; otherwise the result is a prvalue. [ Note: if T is a non-class type that is cv-qualified, the cv-qualifiers are ignored when determining the type of the resulting prvalue; see 3.10. — end note ] 2 An explicit type conversion can be expressed using functional notation (5.2.3), a type conversion operator (dynamic_cast, static_cast, reinterpret_cast, const_cast), or the cast notation. cast-expression: unary-expression ( type-id ) cast-expression 3 Any type conversion not mentioned below and not explicitly defined by the user (12.3) is ill-formed. 4 The conversions performed by — a const_cast (5.2.11), — a static_cast (5.2.9), — a static_cast followed by a const_cast, — a reinterpret_cast (5.2.10), or — a reinterpret_cast followed by a const_cast, поэтому возможно придумать некоторый пример с полиморфными классами где будет применён reinterpret_cast. |
|
|
kwisp |
16.9.2010, 22:11
Сообщение
#24
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
BRE |
16.9.2010, 22:17
Сообщение
#25
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
DEADHUNT |
16.9.2010, 22:27
Сообщение
#26
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
Мы говорим про указатели, ты хочешь сказать, что мне компилятор не даст так сделать? я такого не говорил, в данном случае компилятор применит reinterpret_cast(как описано выше), имелось ввиду что когда будет возможно применить безопасное преобразование, компилятор его применит(только в тех случаях которые описаны в стандарте) Сообщение отредактировал DEADHUNT - 16.9.2010, 22:28 |
|
|
Алексей1153 |
16.9.2010, 22:28
Сообщение
#27
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
BRE, ну ты каких-то далёких от реальной жизни извращений набацал )) В которых принято специальные методы в классах делать, в коих вся темнота должна вручную разбираться, без всяких кастов. Я про это и говорю как раз
Цитата Спокойно преобразовали ее к типу C, указатель от родителя к дитю нельзя спокойно приводить, надо при этом сильно волноваться и думать открой страуструпа (или любой другой весомый материал) стандарт в конце концов и почитай! не, не аргумент. Мясо давай, мясо )) Сообщение отредактировал Алексей1153 - 16.9.2010, 22:29 |
|
|
kwisp |
16.9.2010, 22:31
Сообщение
#28
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
BRE |
16.9.2010, 22:33
Сообщение
#29
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Алексей1153 |
16.9.2010, 22:38
Сообщение
#30
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
BRE, я такие ошибки не допускаю )
убеждать людей в очевидных вещах - глупая затея. потому что убеждать не надо они ОЧЕВИДНЫЕ. это ты точно заметил )) Поэтому я тебя и не убеждаю. Вообще, сильно отклонились от причины моего возмущения - а причина была такова, что, раз уж известно, что там у него должен лежать QComboBox* , то приводить (QComboBox*)(QWidget*) можно без всяких кастов. |
|
|
Текстовая версия | Сейчас: 16.1.2025, 0:46 |