|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
|||||||||||||||||
Шаблоны: найти причины появления ошибок в коде06.04.2018, 00:20. Показов 1125. Ответов 19
Метки нет (Все метки)
Не смог придумать как конкретнее назвать тему
Ситуация следующая - есть классы:
создаются экземляры
0
|
|||||||||||||||||
| 06.04.2018, 00:20 | |
|
Ответы с готовыми решениями:
19
Friend и Шаблоны: найти причины возникновения ошибок в коде и исправить эти ошибки Найти причины и способы исправления ошибок в коде Найти причины и способы исправления ошибок в коде |
|
6 / 6 / 7
Регистрация: 04.04.2018
Сообщений: 22
|
|
| 06.04.2018, 00:38 | |
|
Вы бы полный код скинули. Или, как часто просят на stackOverflow - минимальный код, воспроизводящий проблему. Обычно такая ошибка означает, что ваша функция объявлена, но не определена.
0
|
|
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
||||||
| 06.04.2018, 01:09 [ТС] | ||||||
|
Сейчас до него, к сожалению, добраться не могу, но функция точно определена именно так, как я описал выше
Внутри определённым образом сравниваются элементы (в реальности Foo - связный список, Bar - строка) Добавлено через 8 минут Суть в том, что если перегрузку объявить как
т.е. дело именно в том что шаблон не генерится, но что делать - для меня остается загадкой Добавлено через 7 минут Обнаружил, что если перенести функцию в класс (friend), все компилится нормально... Можно как-то обойти этот момент и реализацию функции оставить вне класса?
0
|
||||||
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|
| 06.04.2018, 01:17 | |
|
h3mbr0, нужен код. Вторым сообщением только запутали.
0
|
|
| 06.04.2018, 01:24 | ||||||
|
Написал за ради теста.. Вроде как работает..
1
|
||||||
|
6 / 6 / 7
Регистрация: 04.04.2018
Сообщений: 22
|
|
| 06.04.2018, 01:26 | |
|
Вообще, как минимум, я тут вижу проблему в том, что у вас объявлен operator=, а компилятор хочет operator<.
0
|
|
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
||||||
| 06.04.2018, 01:47 [ТС] | ||||||
|
Ромаха, в ряде случаев это не работает - требует non-member перегрузку
Вот код(рабочий):
0
|
||||||
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
||
| 06.04.2018, 02:03 | ||
|
0
|
||
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
|
| 06.04.2018, 03:04 [ТС] | |
|
friend не может быть не в class body, и да, это шаблон
Определение выше Весь класс слишком большой Я ведь и написал, что хочу описать эти friend функции вне класса, как это делается с другими методами
0
|
|
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
||||||
| 06.04.2018, 04:44 | ||||||
|
Ну вот как-то так пробуй:
С operator < поступаешь так же:– объявляешь шаблон функции сверху реализации шаблона класса ( как у меня, 1-2 строки ); – фрэндишь специализацию ( 8 строка ); – пишешь реализацию ( 11-15 строки ).
1
|
||||||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||||||
| 06.04.2018, 11:19 | ||||||
|
h3mbr0, Насколько я понял вашу проблему. Вы вынесли перегрузку оператора вне класса, в друзья его не хотите добавлять, но сравнение происходит на основе закрытых переменных, внешняя перегрузка не может получить доступ к закрытым свойствам класса. Либо делайте их доступными извне, либо добавляете перегрузку в друзья, либо переносите перегрузку в класс.
Добавлено через 18 минут Здесь я смог получить именно такую ошибку:
0
|
||||||
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
||||||
| 06.04.2018, 17:42 [ТС] | ||||||
|
Captain Maxee,
0
|
||||||
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
||||||||||||||
| 06.04.2018, 18:40 | ||||||||||||||
|
Реализация такой функции должна выглядеть, например, так:
a находится в приватном секторе, а это значит, что friend никак не повлиял на эту функцию.
1
|
||||||||||||||
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
||||||
| 06.04.2018, 18:51 [ТС] | ||||||
|
Captain Maxee, разобрался, спасибо
код выше
0
|
||||||
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
||||||||||||
| 06.04.2018, 19:14 | ||||||||||||
|
Он состоит из 3 этапов, которые я описал в посте #10: 1. Объявление шаблона функции сверху реализации шаблона класса. 2. Создание конкретной специализации. 3. Реализация шаблона функции. Вот тот же пример, взятый из #10 поста, с добавленными комментариями, где показаны все 3 этапа:
1
|
||||||||||||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|||
| 06.04.2018, 19:15 | |||
|
2
|
|||
|
Комп_Оратор)
|
|||||||
| 07.04.2018, 00:14 | |||||||
|
В чём беда отождествления шаблона (схемы построения/определения типа) и класса (схемы уже известного типа)? В том, что начинает казаться что:
Это если я угадал о чём речь.
1
|
|||||||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
| 07.04.2018, 00:50 | |
|
Captain Maxee, Я пытался получить ту же ошибку, что и у ТС, но к сожалению, мне пришлось срочно уехать, и я свои наблюдения не закончил, а позже я вообще не смог получить доступ к форуму (только сейчас у меня открылась страница). Я понимаю, что допускал ошибки в коде, но ещё раз повторюсь, это было умышленно, чтоб получить ту же ошибку, т.к. ТС код свой не предоставил. Моё сообщение и мой код, это всего-лишь размышления
Я полностью согласен с вашими замечаниями, но закончить свою мысль я так и не успел. Но если честно, я до сих пор не могу понять, в чем именно была ошибка у ТС, т.к. код он свой не предоставляет.
2
|
|
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
|
| 07.04.2018, 15:45 [ТС] | |
|
Avaddon74, ваш код выше максимально компактно воспроизвел именно мой случай
![]() Собственно, проблема была именно в том, в чем я и предположил, и чуть выше приведены примеры ее решения Вся сложность тут, как это обычно бывает с плюсами, была исключительно в нюансах
0
|
|
| 07.04.2018, 15:45 | |
|
Помогаю со студенческими работами здесь
20
Найти причины и способы устранения ошибок в коде Найти причины и способы исправления ошибок в коде Найти причины и способы исправления ошибок в коде Найти причины и способы устранения ошибок в коде Найти причины и способы исправления ошибок в коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|