![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 26.03.2009
Сообщений: 7
|
![]()
Ребят, есть небольшая программка. Кто может сказать почему она не комплируется. Не кидайтесь камнями сразу, читать сообщения компилятора я умею) Но по стандарту вроде не должно быть никакой неоднозначности, 1 должна привестись к типу дабл, а затем должна вызваться прегруженная операция + для комплексного+вещественного. Разве не так?
Код:
Последний раз редактировалось MaTBeu; 26.03.2009 в 18:18. |
![]() |
![]() |
![]() |
#2 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]()
На сколько я понимаю, переменная a у вас типа double. Функция operator+ возвращает значение типа Complex. Получается не соответствие типов
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 22.11.2007
Сообщений: 664
|
![]()
не ручаюсь за правильность, но по-моему нужно добавить библиотеку математ. функций.
Неприятности приходят и уходят, а жизнь продолжается!
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
![]()
А что конкретно компилятор-то пишет?
|
![]() |
![]() |
![]() |
#5 | |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]() Цитата:
![]()
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 26.03.2009
Сообщений: 7
|
![]()
Компилятор пишет:
ex1.cpp: In function ‘int main()’: ex1.cpp:49: ошибка: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second: ex1.cpp:36: замечание: кандидат 1: Complex operator+(Complex, double) ex1.cpp:49: замечание: кандидат 2: operator+(double, int) <built-in> |
![]() |
![]() |
![]() |
#7 |
Регистрация: 26.03.2009
Сообщений: 7
|
![]()
Насколько я знаю по стандарту при подборе подходящей функции из перегруженных действуют следующие правила:
• Если существует перегруженная функция, типы формальных параметров которой в точности совпадают с типами фактических параметров, выбирается эта функция. • Иначе если существует единственная перегруженная функция такая, что типы можно согласовать только с помощью стандартных преобразований, выбирается эта функция. Если подобных функций несколько, компилятор диагностирует ошибку. • Иначе если существует единственная перегруженная функция такая, что типы фактических параметров приводимы к типам формальных параметров, выбирается эта функция. Если подобных функций несколько, компилятор диагностирует ошибку. • Если ни один из вышеперечисленных вариантов не удовлетворяет, диагностируется ошибка. Нам как раз вроде 2 пункт подходит. Соответственно прога должна вывести число 9. Но она почему-то ругается ( |
![]() |
![]() |
![]() |
#8 | |
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
![]() Цитата:
a=x+1; То ли преобразовывать x к double и складывать double с int, то ли преобразовывать 1 к double и складывать Complex и double. Компилятор в недоумении. Замените 1 на 1.0 и программа выведет 9. |
|
![]() |
![]() |
![]() |
#9 | |
Регистрация: 26.03.2009
Сообщений: 7
|
![]() Цитата:
Это понятно что если заменить 1 на 1.0 получится 9 ) Вопрос не в получении результата, а в осмыслении действий компилятора. |
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 24.03.2009
Сообщений: 215
|
![]()
Это относится к тем вещам, где каждый компилятор действует так, как виделась ситуация его создателям.
Стандарт языка и компилятор - совершенно разные понятия. Кстати, одним из самых приближенных к стандарту плюсов считается старый (98 года вроде) вижуаловский... Например, майкрософтовский компилятор ругается на следующий код: Код:
Начиная с 2005 студии так делать можно...
wyvern@localhost:~$ sudo emerge --unmerge world
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не компилируется модуль | Лубышев | Помощь студентам | 6 | 11.03.2013 15:40 |
Не компилируется COM файл | Veselyn | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 19.03.2009 12:35 |
Не компилируется программа | kiloruble | Общие вопросы C/C++ | 11 | 17.11.2008 20:51 |
Не компилируется программа | VladimirVB | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 14.10.2008 23:22 |
Не компилируется исходник | steck | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 32 | 30.07.2007 11:55 |