Проблема при переходе на 4.6, помогите разобраться с конструктором класса |
Здравствуйте, гость ( Вход | Регистрация )
Проблема при переходе на 4.6, помогите разобраться с конструктором класса |
XpycT |
2.12.2009, 10:08
Сообщение
#1
|
Студент Группа: Участник Сообщений: 43 Регистрация: 7.7.2009 Пользователь №: 883 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть проект - прекрасно компилился на версиях 4.5.х , но при переходе на 4.6 начало выдавать ошибки в конструкторе класса.
Первая была решена подстановкой const , тоесть вместо
сделал
А вот с QStringList &screens=QStringList() проблемку не решил .. сам конструктор класса
Тоесть в QStringList &screen при создании диалога должен передаться массив ссылок на скриншоты. Подскажите как задать пустое значение по умолчанию в 4,6. |
|
|
Litkevich Yuriy |
2.12.2009, 11:30
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Обычно используют конструктор по умолчанию, т.е. вместо:
const QString &name="" пишут const QString &name=QString() П.С. это относится не 4.6., а вообще наличе/отсутствие const не должно никак влиять, т.к. это лишь подсказка компилятору проверить за тебя правильность использования данных внутри метода (если аргумент помечен как константный, то его нельзя менять внутри функции) |
|
|
Tonal |
2.12.2009, 11:38
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Какой компилятор?
Конструкция some_type& arg = value в параметрах функции компилится по стандарту не может, т.к. получается противоречие: value в данном случае константа, а внутри функции ты её можешь менять. Эта конструкция работала только в очень старых и не поддерживающих стандарт компиляторах, типа bcc32 v5.0 или msvc 6 Про QStringList не ясно - напиши какую именно ошибку выдаёт компилятор. |
|
|
Litkevich Yuriy |
2.12.2009, 11:43
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Tonal, я тебя не понял, вот стандартная функция:
QStringList QFileDialog::getOpenFileNames ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0 ) [static] что мы не имеем права убрать слово const? |
|
|
Tonal |
2.12.2009, 14:25
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Да. Убрать const можно только со значениями по умолчанию.
Простой пример:
Как компилятор должен это обработать? Куда запишется 10 после вызова foo() в main-е? Сообщение отредактировал Tonal - 2.12.2009, 14:28 |
|
|
Litkevich Yuriy |
2.12.2009, 16:50
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
ага, понял. Если ссылка, то
либо не константная без умалчиваемого значения либо константная с умалчиваемым значением Либо вовсе не ссылка (по значению или по указателю), тогда можно и умалчиваемое значение |
|
|
kwisp |
2.12.2009, 19:37
Сообщение
#7
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
Litkevich Yuriy |
2.12.2009, 20:35
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
XpycT |
2.12.2009, 21:18
Сообщение
#9
|
Студент Группа: Участник Сообщений: 43 Регистрация: 7.7.2009 Пользователь №: 883 Спасибо сказали: 0 раз(а) Репутация: 0 |
Все решилось методом тыка..только отписался поздно. Просто привер второй конструктор к виду с const и проблема отпала сама собой.. странно что в 4,6 это потребовалось - раньше обходился и без этого
|
|
|
Текстовая версия | Сейчас: 28.1.2025, 22:38 |