|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||||||||||||
Перенаправление указателя при перегрузке оператора в variadic template18.04.2015, 16:19. Показов 3109. Ответов 35
Метки нет (Все метки)
Есть вот такой вот код (сделан в vs2014):
Как видится всё это... Вот это должно по сути сработать... (пока что статически написан "0", в будущем конешно хотелось бы тоже поправить, чтоб можно было изменить, для этого int Cur хотел использовать)
И ещё, смежный вопрос, как в самом шаблоне проверить какой тип требуется и адрес. Т.е. хотелось бы чтоб в шаблоне можно было тоже следить за поведением переменных.
0
|
|||||||||||||||||||||
| 18.04.2015, 16:19 | |
|
Ответы с готовыми решениями:
35
Передача в метод по перегрузке оператора указателя на объект
Ошибка при перегрузке оператора << |
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 20.04.2015, 13:31 [ТС] | |
|
Ну так шо, нету никаких соображений?..
0
|
|
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 20.04.2015, 18:56 | |
|
Очень уж запутанный и непонятный вопрос. Выражения вроде "хочу, чтобы нужная переменная вызывалась из указателя" и "шаблон ссылается на адрес" тоже ясности не добавляют. А уж без понимания замысла, стоящего за этим нагромождением объединений и однобуквенных имён, разобраться совсем трудно. Ну и тексты сообщений об ошибке не повредили бы делу.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||
| 20.04.2015, 20:16 [ТС] | |||||
*Прикрепил принт ошибки. И да, ошибка возникает при удалении "delete[] v[1][2].d.pd;" (потому что до "cout << "End Programm" << endl;" не доходит)
0
|
|||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 20.04.2015, 22:21 | |
|
Ошибка возникает из-за путаницы с выделением-освобождением (вероятно, какой-то участок памяти удаляется повторно).
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 20.04.2015, 22:31 [ТС] | ||
|
Результат функции видели на картинке? Она выдаёт не верный ответ, а должен быть как в тестовом примере. Я предполагаю(УВЕРЕН!), что: при направлении v[1][2].d аргумента в шаблоне заполняется не pd элемент, а 8 байт начиная с "&v[1][2].d", т.е. не в указатель на pd[0], а сам .d адрес, в итоге затирается pd указатель на выделенный массив, и результат - невозможно удалить указатель, т.к. адрес к нему был затёрт результатом функции. П.С. Я 100% нуб, и то понимаю это)))
0
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 21.04.2015, 18:54 | |
|
Ну тогда попробуем выяснить, вокруг чего такой кипеш. Функция call. Она получает указатель на функцию, у которого выдрана вся информация об аргументах и возвращаемом значении. Она получает пару экземпляров union, один из которых используется для получения результата, а другой передаётся в вызываемую функцию. Предполагается, что функция вернёт тот же union, который записывается в r. Однако же atof возвращает double, а не означенный union. Отсюда и проблемы. Половина возвращённого double впихивается в union и позже интерпретируется как указатель, а половина попросту теряется.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||
| 21.04.2015, 20:02 [ТС] | ||||||||||
|
О чём ты говориш я вообще не вдупляю. Пустословием не занимайся, явно покажи как исправить. До этого я тестировал с такими поправками:
0
|
||||||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||||||
| 21.04.2015, 20:24 | ||||||
|
То, что ты не понимаешь, о чём я говорю, не значит, что я занимаюсь пустословием. Это значит, что тебе надо восполнять пробелы в знаниях, а также внимательно перечитывать непонятные места.
Так уж и быть, объясню повторно, специально для сумрачных гениев. Функция atof возвращает 8-байтовый double, согласно cdecl calling convention, это значение возвращается в регистрах EAX и EDX. В функции call написано:
Как исправить - тут уж сам страдай, я в эту невменяемую кашу со стиранием типов лезть не хочу.
1
|
||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 21.04.2015, 21:13 [ТС] | |||
|
0
|
|||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||
| 21.04.2015, 21:38 | ||
|
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||
| 22.04.2015, 05:38 [ТС] | ||||||||
|
Добавлено через 4 минуты
0
|
||||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 22.04.2015, 19:03 | |
|
С какой бы стороны зайти, чтобы пробиться сквозь эту стену упрямого непонимания...
Вот все эти операторы преобразования - они работают тогда, когда есть несоответствие реального и ожидаемого типа. В функции call такого несоответствия нет, там всё идеально совпадает. Потому что там из типов данных - только этот невменяемый union. Потому что именно он передаётся в call при вызове. union передаётся в call, union передаётся дальше в вызываемую функцию, возвращаемое ей значение интерпретируется как union и тупо побайтово копируется в r.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 22.04.2015, 19:36 [ТС] | |||
|
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||
| 22.04.2015, 21:43 | |||||||
0
|
|||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||
| 22.04.2015, 22:36 [ТС] | |||||||
|
Так что есть решение для моей задачи или нету? =) Добавлено через 1 минуту П.С. Код какой то левый:
0
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||
| 22.04.2015, 23:17 | |||||
|
Больше добавить нечего. Добавлено через 19 минут
0
|
|||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 23.04.2015, 14:49 [ТС] | ||
|
Я блин и спрашиваю, почему не срабатывает перегруженный оператор, который поидее должен перенаправить получение данных из указателя. Странные вы.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||||||||
| 23.04.2015, 16:37 | |||||||||||||
|
Я тебе пример выше написал. Когда аргумент функции задан типом, а не шаблоном, то оператор срабатывает, когда задан шаблоном, то нет. Потому что шаблон - это не тип. Это потенциально возможное множество типов, потенциально бесконечное. Ну и какой прикажешь вызвать оператор? Шаблон вывел тип, который передали. Передали ему d (вот здесь) Еще раз, операторы преобразования работают только если стоит конкретный тип
Чтобы заработал оператор приведения, нужно подсказать компилятору, какое преобразование необходимо выполнить (например):
0
|
|||||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 23.04.2015, 16:51 [ТС] | |||
|
0
|
|||
| 23.04.2015, 16:51 | |
|
Помогаю со студенческими работами здесь
20
Ошибки при перегрузке оператора <<
Variadic template Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|