crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Проблема при переходе на 4.6, помогите разобраться с конструктором класса
XpycT
  опции профиля:
сообщение 2.12.2009, 10:08
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 43
Регистрация: 7.7.2009
Пользователь №: 883

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть проект - прекрасно компилился на версиях 4.5.х , но при переходе на 4.6 начало выдавать ошибки в конструкторе класса.

Первая была решена подстановкой const , тоесть вместо
QString &content=""

сделал
const QString &content=""


А вот с QStringList &screens=QStringList() проблемку не решил :) .. сам конструктор класса
 PreviewDialog(QWidget *parent=0,const QString &name=""
                  ,const QString &category="",const QString &content=""
                  ,const QString &poster="",QStringList &screens=QStringList());


Тоесть в QStringList &screen при создании диалога должен передаться массив ссылок на скриншоты.

Подскажите как задать пустое значение по умолчанию в 4,6.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.12.2009, 11:30
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 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


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 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 можно только со значениями по умолчанию.
Простой пример:
void foo(int& a = 5) {
  a = 10;
}

int main() {
  foo();
}

Как компилятор должен это обработать?
Куда запишется 10 после вызова foo() в main-е?

Сообщение отредактировал Tonal - 2.12.2009, 14:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.12.2009, 16:50
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 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, 16:50) *
либо константная с умалчиваемым значением

константная может быть как с так и без значения по умолчанию.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.12.2009, 20:35
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 2.12.2009, 22:37) *
константная может быть как с так и без значения по умолчанию.
ну да, надо было фразу иначе построить
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
XpycT
  опции профиля:
сообщение 2.12.2009, 21:18
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 43
Регистрация: 7.7.2009
Пользователь №: 883

Спасибо сказали: 0 раз(а)




Репутация:   0  


Все решилось методом тыка..только отписался поздно. Просто привер второй конструктор к виду с const и проблема отпала сама собой.. странно что в 4,6 это потребовалось - раньше обходился и без этого :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.12.2021, 7:58