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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как написать для QMap значение по-умолчанию в прототипе функции?  (Прочитано 5040 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Ноябрь 03, 2010, 23:38 »

Здравствуйте!


Есть функция, которой может последним параметром передаваться QMap. А может и не передаваться.

Вопрос - как в прототипе такой функции прописать значение по-умолчанию для QMap?

Пробовал так:

Код:
void function( QString name, QMap<QString, QStringList> record=QMap<QString, QStringList>() )
{
 ...
}

Компиляция не идет, выдает ошибку:

Код:
src/recordtabledata.h:53: error: expected ‘,’ or ‘...’ before ‘>’ token
src/recordtabledata.h:53: error: wrong number of template arguments (1, should be 2)

Как сделать правильно?
Записан

Собираю информацию по крупицам
http://webhamster.ru
BlackTass
Гость
« Ответ #1 : Ноябрь 03, 2010, 23:39 »

Код:
void function( QString name, QMap<QString, QStringList> record=(QMap<QString, QStringList>()) )
{
 ...
}
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Ноябрь 04, 2010, 00:05 »

Не, не помогает.

Я вот думаю, чего это я задал в качестве значения по-умолчанию значение конструктора QMap(), так же нельзя. Должна быть какая-то константа вроде.

А как для QMap контанту сделать?
Записан

Собираю информацию по крупицам
http://webhamster.ru
BlackTass
Гость
« Ответ #3 : Ноябрь 04, 2010, 00:07 »

ну во первых советую все же сделать const reference
во-вторых сделайте typedef
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Ноябрь 04, 2010, 00:10 »

ну во первых советую все же сделать const reference
во-вторых сделайте typedef

typedef делал.

А с const у меня вечные проблемы, не понимаю я как им пользоваться. Что имеется в виду под const reference?
Записан

Собираю информацию по крупицам
http://webhamster.ru
BlackTass
Гость
« Ответ #5 : Ноябрь 04, 2010, 00:24 »

const QMap<QString, QStringList> &param
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #6 : Ноябрь 04, 2010, 00:34 »

const QMap<QString, QStringList> &param

А в прототипе с указанием значения по-умолчанию, как это должно выглядеть?
Записан

Собираю информацию по крупицам
http://webhamster.ru
BlackTass
Гость
« Ответ #7 : Ноябрь 04, 2010, 00:46 »

Код:
void function( QString name, const QMap<QString, QStringList> &record=(QMap<QString, QStringList>()) );
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #8 : Ноябрь 04, 2010, 02:18 »

Код:
void function( QString name, const QMap<QString, QStringList> &record=(QMap<QString, QStringList>()) );

Угу, спасибо. Немножко по-другому, но получилось.

Оказалось, что еще и gcc (Debian 4.3.2-1.1) 4.3.2 у меня бажный. Вот этот пример у меня не компилируется: http://rghost.ru/3139469, а у других компиляция идет. А чтоб у меня пошла компиляция, нужно дефолтное значение в скобки взять. Хотя я так с самого начала и делал - всеравно компилация не шла, уж не знаю почему.
Записан

Собираю информацию по крупицам
http://webhamster.ru
BlackTass
Гость
« Ответ #9 : Ноябрь 04, 2010, 02:26 »

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57 вот здесь написано почему в 4.3.2 это не компилится. Надо пользоваться 4.4, либо писать воркэраунд в виде тайпдефа или скобок
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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