![]() 1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||||||||||||
Перегрузка оператора +=27.09.2011, 12:03. Показов 2988. Ответов 33
Метки нет Все метки)
(
Есть два класса: Vec4(вектор из 4х float) и Mat4(вектор из 4х Vec4). Проблема в том что при перегрузке в Mat4 операции += я получаю ошибку компиляции
0
|
27.09.2011, 12:03 | |
Ответы с готовыми решениями:
33
Перегрузка оператора ~ Перегрузка оператора + Перегрузка оператора *= |
![]() ![]() |
|
27.09.2011, 12:17 | |
Gepar, как вообще звучит задание к этой лабе????
Не по теме: Мне не охота копаться в классе Mat4, т.к считаю можно проще сделать(без обид;))
0
|
![]() 1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
27.09.2011, 13:04 [ТС] | |
Задание так и звучит, создать именно вектор и именно из 4х таких элементов. Копаться особо и не надо, мне только напишите чего оно в Mat4 не видит перегрузку += в Vec4, точнее находит обе перегрузки (и для Vec4 и для float) и при этом ругается.
0
|
![]() ![]() |
||||||||
27.09.2011, 13:26 | ||||||||
у меня ругань сюда и сюда Как по мне это странновато вместо float возвращать void от trow ![]() Добавлено через 3 минуты Заменил все trow вот так
Vec4 operator[](int i) mat4.h(25) : error C2664: '__thiscall Vec4::Vec4(const class Vec4 &)' : cannot convert parameter 1 from '' to 'const class Vec4 &' Vec4 operator[](int i) const mat4.h(30) : error C2664: '__thiscall Vec4::Vec4(const class Vec4 &)' : cannot convert parameter 1 from '' to 'const class Vec4 &' Добавлено через 1 минуту Вдобавок Vec4 operator[](int i) mat4.h(25) : error C2446: ':' : no conversion from 'const int' to 'class Vec4' No constructor could take the source type, or constructor overload resolution was ambiguous Может всё таки дело не в перегрузке оператора +??? Добавлено через 5 минут Deviaphan, как может помочь запрет автоматического создания конвертирующего конструктора? ![]()
0
|
Делаю внезапно и красиво
![]() ![]() 1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
27.09.2011, 13:38 | ||
0
|
![]() ![]() |
|||||||||||
27.09.2011, 14:29 | |||||||||||
Gepar, как я помню ты пишешь лабы в 6-ке, так вот компилятор ругается на перегрузку этих операторов
No constructor could take the source type, or constructor overload resolution was ambiguous d:\ìîè äîêóìåíòû\þðà\ëè÷íîå\projects\cvector\ma t4.h(25) : error C2664: '__thiscall Vec4::Vec4(const class Vec4 &)' : cannot convert parameter 1 from '' to 'const class Vec4 &'
No constructor could take the source type, or constructor overload resolution was ambiguous d:\ìîè äîêóìåíòû\þðà\ëè÷íîå\projects\cvector\ma t4.h(30) : error C2664: '__thiscall Vec4::Vec4(const class Vec4 &)' : cannot convert parameter 1 from '' to 'const class Vec4 &' Я без всяких притензий Мне тоже не очень понятно как можно пользоваться индексным оператором elem[i] в теле перегрузки данного оператора??? ![]()
1
|
![]() 1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||||
27.09.2011, 16:39 [ТС] | ||||||||
Добавлено через 31 секунду -=ЮрА=-, конкретно этот код комплиировал minigw так что он не ругается на выброс исключений таким хитрым способом. Добавлено через 3 минуты Добавлено через 1 минуту -=ЮрА=-, сделай так
Добавлено через 1 минуту Кстати насчёт throw в тернарном операторе: я сам думал что так работать не будет, но mingw скомпилировал всё как положено и при выходе за границы и правда выбрасывается исключение, которое также успешно ловится так что работает всё корректно.
0
|
![]() 1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||||||||||||||||||||||
27.09.2011, 16:53 [ТС] | ||||||||||||||||||||||||||
И ещё раз по поводу моей ошибки: minigw пишет что нет кандидата на вызов +=
и дальше пишет кандидат 1 += для Vec4 и кандидат 2 для += это float, мне бы надо чтобы вызывался 1ый кандидат так как он вообще-то и подходит по семантике и вроде всё хорошо, но компилятору же что-то не нравится ... Хотя ... ошибка явно где-то в перегрузке в Vec4 - я попробовал в Main проделать следующее:
![]() Добавлено через 1 минуту Deviaphan, тогда это не работает
Ну и все остальные функции где возвращается temp пишут ошибку + не работает и такой вариант:
Хотя последнее это понятно почему, его исправил, но все остальные где возвращается temp теперь не компилируются ![]() Добавлено через 46 секунд Ну и вообще оно понятно почему они не работают, конструктор копирования то нельзя теперь не явно вызывать, но как же мне тогда поступать? Добавлено через 5 минут Deviaphan, Вы не поняли, сделав
0
|
![]() 1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
27.09.2011, 16:58 [ТС] | |||||||||||
Давайте пока забудем о Mat4, ошибка я вижу не в нём
![]() Допустим имеем Vec4 (изменения насчёт того чтобы возвращалась ссылка на элемент внёс, но теперь компилятор кое-где ругается что мол возвращается ссылка на локальную переменную ...)
0
|
![]() ![]() |
|||||||
27.09.2011, 17:09 | |||||||
Gepar,
![]() Добавлено через 3 минуты Не по теме: Gepar, помню недавно писал что именно 6-ка для приёма лаб, так вот ругань компилятора как раз из шестёрки, я без обид хочу чтобы ты понял в случае компилирования твоего кода при сдаче может получиться неприятный сюрприз:pardon:
0
|
Делаю внезапно и красиво
![]() ![]() 1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||
27.09.2011, 17:10 | ||||||
Ты не правильно понял и написал. Я имел в виду по типу такого:
1
|
![]() 1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
27.09.2011, 17:31 [ТС] | |||||||||||
-=ЮрА=-, это не для сдачи, это задание из книги Страуструпа.
Добавлено через 6 минут Deviaphan, Вы не поняли, сделав
0
|
Делаю внезапно и красиво
![]() ![]() 1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||
27.09.2011, 17:33 | ||||||
Можешь!
Это одно и то же. Первое удали.
0
|
![]() 1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
27.09.2011, 17:38 [ТС] | |||||||||||
Если же убрать explicit и сделать всюду как посоветовал Deviaphan то ошибки насчёт возврата локальных переменных исчезнут, а в main где написано
warning: pointer to a function used in arithmetic| А потом уже ошибки
На всякий случай прикрепил Vec4.h + main.cpp в виде архива, возможно так будет удобнее чтобы посмотреть файл в привычном редакторе.
0
|
Делаю внезапно и красиво
![]() ![]() 1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||
27.09.2011, 18:02 | ||||||
Указатель на функцию используется в арифметическом выражениии...
Добавлено через 7 минут Про explicit для Vec4 я погорячился.) Он там не нужен. Добавлено через 3 минуты "Твою ж мать!"
А std::right это манипулятор, который ты пытаешься использовать, как функцию. Добавлено через 23 секунды Жирненько не получилось выделить.( Добавлено через 44 секунды И у тебя там лишние методы для Vec4, надо почистить. Добавлено через 1 минуту Собственно, нужно просто внимательнее читать сообщение: *(std::right + ((unsigned int)i)) Адрес функции std::right пытается сдвинуться на , чего для адресов функции не предусмотрено. А я ещё понять не мог, чего он такого странного пишет. ![]()
0
|
27.09.2011, 18:02 | |
Помогаю со студенческими работами здесь
20
Перегрузка оператора Перегрузка оператора != Перегрузка оператора > перегрузка оператора () Перегрузка оператора *= Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
|
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
|
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Опубликовано: 07. 07. 2025
Рубрика: Uncategorized
Автор: AlexA
Статья размещается на сайте с разрешения. . .
|
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
|
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
|
Основы WebGL. Раскрашивание вершин с помощью VBO
8Observer8 05.07.2025
На русском
https:/ / vkvideo. ru/ video-231374465_456239020
На английском
https:/ / www. youtube. com/ watch?v=oskqtCrWns0
Исходники примера:
|
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Mr. Docker 04.07.2025
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К. . .
|
Проблемы с Kotlin и Wasm при создании игры
GameUnited 03.07.2025
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой. . .
|
Создаем микросервисы с Go и Kubernetes
golander 02.07.2025
Когда я только начинал с микросервисами, все спорили о том, какой язык юзать. Сейчас Go (или Golang) фактически захватил эту нишу. И вот почему этот язык настолько заходит для этих задач:
. . .
|
C++23, квантовые вычисления и взаимодействие с Q#
bytestream 02.07.2025
Я всегда с некоторым скептицизмом относился к громким заявлениям о революциях в IT, но квантовые вычисления - это тот случай, когда революция действительно происходит прямо у нас на глазах. Последние. . .
|