быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Есть два перегруженныйх оператора *, но компилятор не может выбрать нужный, почему?26.06.2012, 16:06. Показов 2244. Ответов 23
Метки нет (Все метки)
ВЫбирать надо
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= Проблема почему-то исчезает если закомментить также
0
|
26.06.2012, 16:06 | |
Ответы с готовыми решениями:
23
Как выбрать нужный компилятор для сборки в Qt Creator? Почему компилятор жалуется на неправильное использование оператора ?: Почему компилятор ругается на то, что класс не объявлен при использовании оператора если? Почему без приведения типа невозможно выбрать нужный указатель на перегруженную функцию-член? |
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|||||||||||
28.06.2012, 01:05 | 21 | ||||||||||
Сообщение было отмечено как решение
Решение
Итак, у нас есть функция член
Всё довольно просто. Чтобы вызвать первую функцию первый аргумент подходит идеально, а для второго надо сделать преобразование someClass & => someClass const& Чтобы вызвать вторую функцию, наоборот, идеально подходит второй аргумент, а для первого надо выполнить преобразование someClass => float => int То есть для первой функции лучше подходит первый аргумент, а для второй — второй. Это и вызывает неоднозначность. Что делать? Чтобы устранить неоднозначность надо второй аргумент сделать одинаковым. То есть либо в глобальной функции сделать ссылку ссылкой на константу, либо в функции-члене убрать const или вовсе использовать передачу второго аргумента по значению. Да, в этом случае для функции-члена оба аргумента подходят лучше, чем для глобальной функции. Добавлено через 5 минут Что-то похожее на описанное мной есть в 13.3.3.3 стандарта C++03.
3
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
28.06.2012, 07:28 | 22 |
grizlik78, да, что-то забыл я, что преобразование из не-const в const тоже учитывается при разрешении перегрузки...
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
28.06.2012, 11:30 | 23 | |||||
C++11 легко решает эту проблемку.
2
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
28.06.2012, 11:35 | 24 |
Ну мало ли. Может неявное преобразование к float желательно. А вот делать правый аргумент у этих функций разным большого смысла не вижу.
0
|
28.06.2012, 11:35 | |
28.06.2012, 11:35 | |
Помогаю со студенческими работами здесь
24
Есть два БП. Какой выбрать? Что выбрать 9800GTX+ или GTS250? А может есть и другие альтернативы? Выбрать из бд строку, если есть хотя бы 1 ключ, ключей может быть много Замена материнской платы. Есть два варианта. Что выбрать? Есть данная БД. Нужно написать два запроса на SQL. Может ли кто-то подсказать? Алгоритм Петерсона: почему поток не может два раза подряд выполнить критическую секцию? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |