Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Ноябрь 03, 2010, 23:38



Название: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: xintrea от Ноябрь 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)

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


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: BlackTass от Ноябрь 03, 2010, 23:39
Код:
void function( QString name, QMap<QString, QStringList> record=(QMap<QString, QStringList>()) )
{
 ...
}


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: xintrea от Ноябрь 04, 2010, 00:05
Не, не помогает.

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

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


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: BlackTass от Ноябрь 04, 2010, 00:07
ну во первых советую все же сделать const reference
во-вторых сделайте typedef


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: xintrea от Ноябрь 04, 2010, 00:10
ну во первых советую все же сделать const reference
во-вторых сделайте typedef

typedef делал.

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


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: BlackTass от Ноябрь 04, 2010, 00:24
const QMap<QString, QStringList> &param


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: xintrea от Ноябрь 04, 2010, 00:34
const QMap<QString, QStringList> &param

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


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: BlackTass от Ноябрь 04, 2010, 00:46
Код:
void function( QString name, const QMap<QString, QStringList> &record=(QMap<QString, QStringList>()) );


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: xintrea от Ноябрь 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://rghost.ru/3139469), а у других компиляция идет. А чтоб у меня пошла компиляция, нужно дефолтное значение в скобки взять. Хотя я так с самого начала и делал - всеравно компилация не шла, уж не знаю почему.


Название: Re: Как написать для QMap значение по-умолчанию в прототипе функции?
Отправлено: BlackTass от Ноябрь 04, 2010, 02:26
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57 вот здесь написано почему в 4.3.2 это не компилится. Надо пользоваться 4.4, либо писать воркэраунд в виде тайпдефа или скобок