|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||||||||||||
Перегрузка оператора +=27.09.2011, 12:03. Показов 3451. Ответов 33
Метки нет (Все метки)
Есть два класса: Vec4(вектор из 4х float) и Mat4(вектор из 4х Vec4). Проблема в том что при перегрузке в Mat4 операции += я получаю ошибку компиляции
0
|
||||||||||||||||
| 27.09.2011, 12:03 | |
|
Ответы с готовыми решениями:
33
Перегрузка оператора ~ Перегрузка оператора + Перегрузка оператора *= |
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 27.09.2011, 13:04 [ТС] | |
|
Задание так и звучит, создать именно вектор и именно из 4х таких элементов. Копаться особо и не надо, мне только напишите чего оно в Mat4 не видит перегрузку += в Vec4, точнее находит обе перегрузки (и для Vec4 и для float) и при этом ругается.
0
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 27.09.2011, 13:13 | |
|
Добавь в конструкторах слово explicit.
1
|
|
|
|
||||||||
| 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
|
|||||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 27.09.2011, 15:54 | |
|
0
|
|
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||||
| 27.09.2011, 16:39 [ТС] | ||||||||
|
Добавлено через 31 секунду -=ЮрА=-, конкретно этот код комплиировал minigw так что он не ругается на выброс исключений таким хитрым способом. Добавлено через 3 минуты Добавлено через 1 минуту -=ЮрА=-, сделай так
Добавлено через 1 минуту Кстати насчёт throw в тернарном операторе: я сам думал что так работать не будет, но mingw скомпилировал всё как положено и при выходе за границы и правда выбрасывается исключение, которое также успешно ловится так что работает всё корректно.
0
|
||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 27.09.2011, 16:41 | |
|
Vec4(const Vec4& right)
Mat4(const Vec4 &x)
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
|
||||||||||||||||||||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 27.09.2011, 16:53 | |
|
Mat4 = Mat4( vec4 + vec4 );
Но сперва сделать все аргументы константными ссылками (коими они и должны были быть изначально). Методы не изменяющие состояние должны быть константными.
1
|
|
|
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
Перегрузка оператора Перегрузка оператора != Перегрузка оператора > перегрузка оператора () Перегрузка оператора *= Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|