У меня есть следующая функция (которая работала в Visual Studio):
bool Plane::contains(Vector& point){
return normalVector.dotProduct(point - position) < -doubleResolution;
}
Когда я компилирую его, используя g ++ версии 4.1.2, я получаю следующую ошибку:
Plane.cpp: In member function âvirtual bool Plane::contains(Vector&)â:
Plane.cpp:36: error: no matching function for call to âVector::dotProduct(Vector)â
Vector.h:19: note: candidates are: double Vector::dotProduct(Vector&)
Итак, как вы можете видеть, компилятор считает (точка-позиция) вектором, но ожидает вектор &.
Какой лучший способ это исправить?
Я убедился, что это работает:
Vector temp = point-position;
return normalVector.dotProduct(temp) < -doubleResolution;
Но я надеялся на что-нибудь немного чище.
Я слышал предположение, что добавление конструктора копирования может помочь. Поэтому я добавил конструктор копирования в Vector (см. Ниже), но это не помогло.
vector.h:
Vector(const Vector& other);
Vector.cpp:
Vector::Vector(const Vector& other)
:x(other.x), y(other.y), z(other.z), homogenous(other.homogenous) {
}