
Simplesmente eu não consigo entender porque tá errado!
A intenção era fazer com que haja sobrecarga do operador + para que quando eu some dois vetores, a resposta seja um vetor, e que quando eu subtraia dois pontos, a resposta seja um vetor também.
O 1o problema é que o compilador cismou com a minha cara e não compila de jeito nenhum, sendo que o erro que ele encontra não é a situação que ocorre... E o 2o é que quando eu faço uma operação do tipo vetor = ponto - ponto ele não aceita... sendo que a subtração está definida para retornar um vetor e, como o = tem menor precedência, era pra avaliar primeiro a subtração...
Alguém saberia me dizer onde está o erro aqui?

Vector.cpp
const Vector Vector::operator+(Vector& V) { register unsigned char i; double comp[3]; for(i=0; i<3; i++) comp[i] = components[i] + V.components[i]; 104 return Vector(comp); }
Point.cpp
const Vector Point::operator-(Point& P) { register unsigned char i; double comp[3]; for(i=0; i<3; i++) comp[i] = positions[i] - P.positions[i]; 75 return Vector(comp); }
saída do compilador
Vector.cpp: In member function ‘const Vector Vector::operator+(Vector&)’: Vector.cpp:104: error: no matching function for call to ‘Vector::Vector(Vector)’ Vector.cpp:21: note: candidates are: Vector::Vector(Vector&) Vector.cpp:15: note: Vector::Vector(double*) Point.cpp: In member function ‘const Vector Point::operator-(Point&)’: Point.cpp:75: error: no matching function for call to ‘Vector::Vector(Vector)’ Vector.hpp:14: note: candidates are: Vector::Vector(Vector&) Vector.hpp:13: note: Vector::Vector(double*)
main.cpp
28 lookv = (lookat - eye);Com lookv um Vector e lookat e eye Point.
saída do compilador
f.main.cpp: In function ‘void arrowpress(int, GLint, GLint)’: main.cpp:28: error: no match for ‘operator=’ in ‘lookv = Point::operator-(Point&)(((Point&)(& eye)))’ Vector.hpp:31: note: candidates are: const Vector Vector::operator=(Vector&)