1 / 1 / 1
Регистрация: 19.09.2016
Сообщений: 51
|
|||||||||||
1 | |||||||||||
Не получается правильно объявить friend перегрузку оператора с использованием шаблонов10.06.2017, 22:43. Показов 1327. Ответов 14
Всем привет! Посмотрите код и во вложениях скриншот ошибок, и, пожалуйста, подскажите, что сделал не так. А то я правда уже не знаю, что делать...
Итак, класс FileObj, объявление метода, его прототип:
0
|
10.06.2017, 22:43 | |
Ответы с готовыми решениями:
14
Разреженный массив (с использованием шаблонов), исключение оператора посредством SFINAE Как объявить friend функцию класса Friend-функции перегрузки оператора Перегрузка friend оператора в матрицах |
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
|
|||||||||||
10.06.2017, 22:55 | 2 | ||||||||||
заменяй
Прототип в классе:
1
|
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
|
||||||
10.06.2017, 22:56 | 3 | |||||
Оператор ввода обычно имеет прототип:
1
|
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
|
|
10.06.2017, 22:58 | 4 |
Olej, у него не ввод идет, а взаимодействие между объектами, открываются 2 файла; 1 на считывание, а другой на запись.
Из одного в другой записывает.
1
|
Вездепух
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
|
|||||||||||
10.06.2017, 23:11 | 5 | ||||||||||
Сообщение было отмечено kuksik как решение
Решение
Вопрос возникает с завидной частотой. У вас в коде friend-ом объявлена нешаблонная функция. Ваша же шаблонная функция friend-ом не является.
Исправить можно двумя способами 1. Ленивый способ.
2. Аккуратный способ.
T , будут friend-ами друг друга.
5
|
1 / 1 / 1
Регистрация: 19.09.2016
Сообщений: 51
|
|
10.06.2017, 23:23 [ТС] | 6 |
Огромное спасибо!! Выручили очень сильно
А можно ещё объяснить вот это?
0
|
Вездепух
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
|
||||||
10.06.2017, 23:27 | 7 | |||||
В вашем исходном варианте "дружба" будет работать вот в таком виде (я приведу упрощенный синтетический пример, вместо вашего)
1
|
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
|
|
10.06.2017, 23:30 | 8 |
1
|
1 / 1 / 1
Регистрация: 19.09.2016
Сообщений: 51
|
|||||||||||
10.06.2017, 23:36 [ТС] | 9 | ||||||||||
Вот я пытался сделать так:
Код
declaration of 'class T' error: shadows template parm ‘class T‘ Так тоже пробовал:
0
|
Вездепух
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
|
|
10.06.2017, 23:39 | 10 |
Отсутствующая
<T> в том месте выглядит некрасиво (неединообразно), но на самом деле является необязательной и ни на что не влияет. Так что никакого "Понятно" в этом нет.Добавлено через 1 минуту Именно ошибка. Переиспользовать имя параметра шаблона T в роли параметра внутреннего шаблона нельзя.Это вообще ничего не меняет. Внутри шаблона класса FileObj<T> имена FileObj<T> и просто FileObj - синонимы. Можно писать и так, и так.
1
|
1 / 1 / 1
Регистрация: 19.09.2016
Сообщений: 51
|
|
10.06.2017, 23:41 [ТС] | 11 |
Но ведь в вашем "Ленивом" способе так же реализовано
0
|
Вездепух
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
|
|
10.06.2017, 23:45 | 12 |
Это где ж это у меня "так же"? Параметр внутреннего шаблона во friend-объявлении у меня называется
U , а не T . Смотрите внимательнее.
1
|
1 / 1 / 1
Регистрация: 19.09.2016
Сообщений: 51
|
|
10.06.2017, 23:52 [ТС] | 13 |
Я подумал, что Вы просто ошиблись. Ибо во втором методе тоже <U>, хотя там <T>, верно? И я не знал, что так вообще можно, так что теперь знаю, спасибо)
0
|
Вездепух
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
|
|
10.06.2017, 23:55 | 14 |
Не понимаю вопроса. Во втором методе нет вложенного объявления шаблона. Потому там такой проблемы вообще не возникает, конфликта имен нет и никакого
U не нужно вообще.
1
|
1 / 1 / 1
Регистрация: 19.09.2016
Сообщений: 51
|
|
11.06.2017, 00:03 [ТС] | 15 |
Ой, это уже мой прокол, не туда посмотрел)
Во всяком случае, спасибо, что уделили на меня время, помогли и всё объяснили)
0
|
11.06.2017, 00:03 | |
11.06.2017, 00:03 | |
Помогаю со студенческими работами здесь
15
Организовать перегрузку оператора (=) Перегрузка оператора инкремента/декремента через friend Не выводит перегрузку оператора сложения Реализовать перегрузку оператора индексации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |