![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Luyan |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 3.12.2008 Репутация: 2 Всего: 7 |
давно юзаю дружественные функции, но возникла проблема
вот очень простой пример
компилятор посылает меня куда то в тех поддержку: Compiling... main.cpp E:\Zad\fraction\main.cpp(25) : fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1786) Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information Error executing cl.exe. fraction.exe - 1 error(s), 0 warning(s) А если поменять знак '+', например, на знак '*' в объявлении, определении функции и в майне, то всё зароботает. В чём проблема? уже перегружал дружественной функцией оператор '+', но такого типа ошибка впервые. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
прежде всего напрашивается вопрос, а где копи-конструктор ?
![]() если это: Fraction(Fraction& c) то там не хватает квалификатора const ![]() Это сообщение отредактировал(а) mes - 29.5.2009, 23:17 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
а это что? ![]() Luyan 1. Какая версия студии? 2. попробуйте перезапустить компилятор 3. попробуйте создать проект снова сам код - с точки зрения С++ нормальный. А вообще - не очень грамотно написан. Это сообщение отредактировал(а) azesmcar - 29.5.2009, 19:35 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
это конструктор по ссылке ![]() Это сообщение отредактировал(а) mes - 29.5.2009, 23:17 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
вы имеете ввиду что ссылка неконстантная?? это конечно странно в данном контексте, но вполне законно..и это считается копи-конструктором. Для примера - копи конструктор std::auto_ptr принимает неконстантную ссылку. Это сообщение отредактировал(а) azesmcar - 29.5.2009, 19:36 |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а теперь посмотрите, что получается при прибавлении в таком случае - ссылка на временный объект ![]() Добавлено @ 19:41
у std::auto_ptr нет копи-конструктора, и именно это является причиной, почему компилятор отказывается помещать в std::контейнер. у std::auto_ptr нет константного копи-конструктора, и именно это является причиной, почему компилятор отказывается помещать в std::контейнер. ![]() Это сообщение отредактировал(а) mes - 29.5.2009, 23:16 |
||||
|
|||||
Luyan |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 3.12.2008 Репутация: 2 Всего: 7 |
1. Microsoft Visual C++ 6.0 2. Перезапускал 3. Пересоздавал проект Ничего нового не произошло. главное не понятно, в других проектах перегруженный дружественной функцией operator+ работает ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
поставьте все таки const и проверьте еще раз ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Это сообщение отредактировал(а) zim22 - 29.5.2009, 19:51 |
|||
|
||||
azesmcar |
|
||||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Не совсем понял о чем речь.
и как тогда работает вот это?
источник всех бед ![]() что вы нормальный компилятор то не скачаете? INTERNAL COMPILER ERROR - внутреняя ошибка, либо вы написали что-то, чем сильно смутили компилятор, либо у него просто критические дни. Может быть и то и другое, критические дни у смущенного компилятора - это слишком. Это сообщение отредактировал(а) azesmcar - 29.5.2009, 20:00 |
||||||||||
|
|||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Посмотрел в стандарт, действительно и то и другое (с константной ссылкой и с простой) называется copy-constructor. Признаю ошибку.
Однако это не отменяет того, что при данной схеме должен быть "константный" копи--конструктор. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
то что получается следующее
и ни один нормальный компилятор такое не откомпилирует. |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Вообще конструктор копирования НАДО писать по возможности константным. Один неконстантный конструктор копирования за собой цепочку потащит.
Добавлено через 1 минуту и 51 секунду Уже интереснее ![]() 1. Я честно говоря весь код не смотрел 2. Мой "ненормальный откомпилировал" без единого варнинга ![]() сейчас загляну в код, что же там такое написано |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Luyan,ловите исправленый вариант :
Это сообщение отредактировал(а) mes - 29.5.2009, 20:10 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |