naofuieu 0 Denunciar post Postado Novembro 19, 2008 Galera, tô em litígio aqui com a sobrecarga de operadores... <_< 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? :unsure: 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&) Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 19, 2008 #include <iostream> using namespace std; class MyVector { int components[3]; public: MyVector(int C[3]) { for(int i=0;i<3;i++) components[i] = C[i]; } const MyVector operator+(MyVector V) { register unsigned char i; int comp[3]; for(i=0; i<3; i++) comp[i] = components[i] + V.components[i]; return MyVector(comp); } void imprime(){ for(int i=0;i<3;i++) cout << components[i] << endl; } }; #include <iostream> #include "vector.cpp" using namespace std; class Point { int positions[3]; public: Point(int P[3]){ for(int i=0;i<3;i++) positions[i]=P[i]; } const MyVector operator-(Point P) { register unsigned char i; int comp[3]; for(i=0; i<3; i++) comp[i] = positions[i] - P.positions[i]; return MyVector(comp); } void imprime(){ for(int i=0;i<3;i++) cout << positions[i] << endl; } }; #include "point.cpp" using namespace std; int main() { int A1[] = {1,2,3}; MyVector V1(A1); int A2[] = {3,1,7}; MyVector V2(A2); MyVector V3(V1 + V2); cout << "Vetor 3:\n"; V3.imprime(); Point P1(A1); Point P2(A2); cout << "ponto 1:\n"; P1.imprime(); cout << "ponto 2:\n"; P2.imprime(); cout << "ponto 3:\n"; MyVector V4(P1-P2); V4.imprime(); } Vê se isso ajuda. Compartilhar este post Link para o post Compartilhar em outros sites