Я пытаюсь перегрузить оператор *
, чтобы умножить два объекта (точечный продукт).Оператор перегрузки в C++
Указанные предметы могут быть Point3D
, Vector3D
или Normal
. Все они имеют одну и ту же структуру (значение x, y и z), я разделил их только на семантику.
Линия, которая дает мне проблемы заключается в следующем:
float t = (point - r.origin)*normal/(r.direction * normal);
Здесь точка и r.origin является Point3D
, нормальным является Normal
и r.direction является Vector3D
. В заголовочных файлах для этих классов я следующие функции перегрузки:
В Vector3D.h:
Vector3D operator *(Normal& n);
В Point3D.h:
Point3D operator -(Point3D& p);
Point3D operator *(Normal& n);
Ошибки я получаю:
No match for 'operator*' in 'r->Ray::direction * ((const Plane*)this)->Plane::normal'
Предполагая, что я правильно заполнил функции в файле .cpp, есть ли что-то глупое, что я сделал Вот? Кроме того, проигнорируйте тот факт, что еще нет оператора деления ... Он в стадии разработки!
Приветствия
Приветствия за помощь, но изменение их всех на const дает мне ошибки «отбрасывает квалификаторы». Извините, я только начал C++ вчера:/ –
Возможно, вы могли бы предоставить нам [* полный * пример] (http://sscce.org), который демонстрирует проблему, с которой вы сталкиваетесь. Мы можем только догадываться о том, как выглядит остальная часть вашего кода, и это никому не помогает. –
«отбрасывает квалификаторы» означает, что вы вызываете что-то в функции, которая не принимает 'const', но, вероятно, должна. Покажите нам больше кода. –