|
3 / 3 / 1
Регистрация: 30.03.2014
Сообщений: 50
|
|||||||||||
Реализация дружественной (friend) функции04.11.2014, 02:46. Показов 5150. Ответов 8
Метки нет (Все метки)
Всем доброго времени суток.
Хотел бы попросить помощи, ибо запутался. Задачи состоит в том, чтобы произвести сравнение объекта базового и производного класса. Так как мы их сравниваем, необходимо воспользоваться friend. И вот получается 5 файлов; main.cpp Circle.h Circle.cpp Ball.h Ball.cpp Собственно запутался в friend. Постоянно выдает ошибку о том, что или не видит индификатор или вообще не понимает о чем речь. (2255)(2245) Я слышал что для ее использования обязательно нужно выносить реализацию за предлеы класса, но честно как я уже только не пробывал, пожалуйста подскажите, как будет пахать. Реализация в main, как и говорил за классом. Ball.cpp
0
|
|||||||||||
| 04.11.2014, 02:46 | |
|
Ответы с готовыми решениями:
8
Реализация friend функции Ошибка дружественной фунци: a managed type cannot have any friend functions/classes/interfaces
|
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,219
|
||||
| 04.11.2014, 03:04 | ||||
|
В общем, без полного кода трудно судить. Но сильно подозреваю (судя про закомментированным участкам кода), что вы у себя устроили зацикленное включение заголовочных файлов. Типа 'Ball.h' включается в 'Circle.h', а 'Circle.h' включается в 'Ball.h', что, разумеется, ни к чему хорошему не приведет.
1
|
||||
|
3 / 3 / 1
Регистрация: 30.03.2014
Сообщений: 50
|
||||||||||||||||
| 04.11.2014, 03:16 [ТС] | ||||||||||||||||
|
извините за не четкие комментарии.
Сейчас постараюсь пояснить, не весь код ибо форум не допускает такое количетсво символов, остальные три файла прикрепляю. К сожалению про вынос мне сказал кхм.. мой препод по программированию, поэтому вот пытаюсь усираюсь.Не ищу крайнего хочу разобраться, реально. По поводу ошибок, если вот как раз и убрать комментарии это будет пытатсья работать friend и будет выдавать: 2146 main.cpp
Добавлено через 9 минут точнее там выдает 2245, извиняюсь по ночи, не то ляпнул.
0
|
||||||||||||||||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,219
|
|||||||||||||||||
| 04.11.2014, 03:36 | |||||||||||||||||
Сообщение было отмечено Twelv как решение
РешениеПроблемная часть вот эта
Более того, невозможно "добавить" в определение класса 'Circle' новые члены после того, как определение класса 'Circle' завершено. Вы определили класс 'Circle' в файле 'Circle.h'. Вот то, что вы написали в 'Circle.h' - это навсегда и останется вашим классом 'Circle'. Вы не можете добавить в 'Circle' новые операторы в файле 'Ball.h'. Если вы хотите, чтобы в классе 'Circle' были операторы сравнения с классом 'Ball', то вам придется их сразу же вписывать в определение класса 'Circle' в файле 'Circle.h'. Тут возникает очевидная проблема: во время определения класса 'Circle' никто еще не знает ни о каком классе 'Ball'. Т.е. все попытки объявить 'operator == (Ball)' в классе 'Circle' не будут компилироваться. Это уже демонстрирует ущербность такого подхода к дизайну операторов в классе, как членов самого класса. С одной стороны, класс 'Circle' в файле 'Circle.h' не должен ничего знать о классе 'Ball'. С другой стороны, если вы хотите, чтобы операторы сравнения с 'Ball' были членами класса 'Circle', то без такого знания не обойтись. Чтобы заставить ваш код компилироваться без изменения дизайна, можно воспользоваться таким "костылем": добавить в начало файла 'Circle.h' объявление класса 'Ball'
Но это все равно кривой дизайн. По уму надо было бы делать операторы сравнения самостоятельными, отдельно стоящими функциями (возможно, друзьями, если надо). ============================== Но на самом деле я не понимаю, зачем вам вообще понадобился весь этот зоопарк смешанных операторов сравнения 'Circle' с 'Ball'. В этих смешанных операторах сравнения вы используете только общие поля этих классов, т.е. поля 'Circle'. Но в таком случае писать смешанные сравнения на надо вообще. Достаточно написать сравнения для 'Circle' и все. А смешанные сравнения 'Circle' с 'Ball' будут просто их использовать, ибо 'Ball' приводим к 'Circle'
1
|
|||||||||||||||||
|
3 / 3 / 1
Регистрация: 30.03.2014
Сообщений: 50
|
||||||
| 04.11.2014, 04:18 [ТС] | ||||||
|
Выдало.
Ошибка была, на friend вставленный в класс. то есть ошибка в 45 стр.
Visual Studio 2013 Другие версии Эта тема еще не получила оценку - Оценить эту тему недостаточное число параметров для бинарного оператора "оператор" Бинарному оператору не переданы параметры. Следующий пример приводит к возникновению ошибки C2805:
0
|
||||||
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,219
|
|||||||
| 04.11.2014, 05:08 | |||||||
Сообщение было отмечено Twelv как решение
Решение
1
|
|||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 04.11.2014, 06:05 | |
Сообщение было отмечено Twelv как решение
Решение
...
1
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 04.11.2014, 06:22 | |
Сообщение было отмечено Twelv как решение
Решение
Или так.
0
|
|
|
3 / 3 / 1
Регистрация: 30.03.2014
Сообщений: 50
|
|
| 04.11.2014, 11:59 [ТС] | |
|
Огромной спасибо, очень очень выручили, я реально за этой лабой провел не одну ночь!
Просто раньше даже никто в темы не отвечал, а тут так помогли и быстро разобрали спасибо огромное. Прям реально очень помогли, четко и по делу.
0
|
|
| 04.11.2014, 11:59 | |
|
Помогаю со студенческими работами здесь
9
Ошибка дружественной функции Идентификатор не определён в дружественной функции Перегрузка метода и дружественной функции Ошибка при использовании дружественной функции Как из дружественной функции сделать метод Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|