Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка функции, странный выбор 
:(
    Опции темы
Vasya
Дата 24.2.2013, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 5.7.2003

Репутация: нет
Всего: нет



Добрый день!
Пишу небольшую програмулину в среде QT и сталкнулся с следующим приколом. Наследую класс от QAbstractTableModel и реализую виртуальную функцию

Код

bool setData(QModelIndex &index, QVariant &value, int role = Qt::EditRole);


затем перегружаю эту функцию пару раз для удобства: 
Код

bool setData(const int &row, const int &column, QVariant &value);
bool setData(const int &rowIndex, const QString &columnName, QVariant &value);

Далее вызываю где-то в прогамме третий фариант функции
Код

setData(row, "field1", 100500);


при сборке получаю следущее сообщение:
error: initializing argument 2 bool setData(int &, int &, QVariant &), т. е. подставляется второй вариант. 

Но если я вызову третий вариант следующим способом
Код

QVariat v = 100500;
setData(row, "field1", v);


то компилятор не ругается.
Что это такое?

Это сообщение отредактировал(а) Vasya - 24.2.2013, 12:42
PM MAIL   Вверх
NoviceF
Дата 24.2.2013, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



Совет отменяется, не заметил передачу по ссылке..

Возможно, константа 
Код

"field1"
 
не однозначно определяется копилятором, как ссылка на QString.

Я, честно говоря, не совсем представляю, как этот параметр передаётся в функцию.. вроде бы в сигнатуре заявлена ссылка на существующий объект QString, а передаётся массив чаров..

Это сообщение отредактировал(а) NoviceF - 24.2.2013, 13:17
PM MAIL   Вверх
Vasya
Дата 24.2.2013, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 5.7.2003

Репутация: нет
Всего: нет



Цитата(NoviceF @ 24.2.2013,  13:06)
Совет отменяется, не заметил передачу по ссылке..

Возможно, константа 
Код

"field1"
 
не однозначно определяется копилятором, как ссылка на QString.

Я, честно говоря, не совсем представляю, как этот параметр передаётся в функцию.. вроде бы в сигнатуре заявлена ссылка на существующий объект QString, а передаётся массив чаров..

мдаа.... Заменил QVariant &value на const QVariant &value и проблема исчезла  smile 
PM MAIL   Вверх
mes
Дата 24.2.2013, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Vasya @  24.2.2013,  15:01 Найти цитируемый пост)
Заменил QVariant &value на const QVariant &value

 smile , особенности возможностей константной ссылки..  Позволяет преобразовать на лету с созданием временного обьекта.. 


--------------------
PM MAIL WWW   Вверх
Dem_max
Дата 24.2.2013, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Код

setData(row, (QString)"field1", (QVariat)100500);



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
NoviceF
Дата 24.2.2013, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



Цитата(NoviceF @  24.2.2013,  14:06 Найти цитируемый пост)
Я, честно говоря, не совсем представляю, как этот параметр передаётся в функцию.. 

разобрался при помощи небольшого эксперимента. В функции создаётся и инициализируется переданной переменной временный объект того типа, который указан в сигнатуре.

Цитата(Vasya @  24.2.2013,  17:01 Найти цитируемый пост)
Заменил QVariant &value на const QVariant &value и проблема исчезла 

ну собственно неконстантный объект компилятор просто так и не пропустит:

http://codepad.org/PEY7Rvu1
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3952 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.