Я пытаюсь перегрузить оператор *
, чтобы умножить два объекта (скалярное произведение).
Эти объекты могут быть Point3D
, Vector3D
или Normal
. Все они в основном имеют одинаковую структуру (значения x, y и z), я разделил их только на семантику.
Линия, которая доставляет мне неприятности, такова:
float t = (point - r.origin)*normal / (r.direction * normal);
Здесь point и r.origin - это Point3D
, normal - это 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, я что-то не так сделал? Кроме того, не обращайте внимания на тот факт, что еще нет оператора деления ... Это в процессе!
Приветствия