Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

naofuieu

Apanhando de sobrecarga de operadores

Recommended Posts

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

#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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.