Jump to content


Photo

Apanhando De Sobrecarga De Operadores


  • Faça o login para participar
Nenhuma resposta neste tópico

#1 naofuieu

naofuieu

    Novato no fórum

  • Usuários
  • 3 posts
  • Sexo:Não informado
  • Localidade:Fortaleza-CE
  • Interesses:ASP, HTML, JavaScript, Dreamweaver, Fireworks, Flash, Fontes e Access

Posted 19/11/2008, 01:06

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&)





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq