Ir para conteúdo
Fórum Script Brasil
  • 0

Apanhando de sobrecarga de operadores


naofuieu

Pergunta

Galera, estou 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&)

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

o primero erro ta muito estranho mesmo, você ta passando um array de double e ele acusa q ta passando um vector...

mas esse erro só acontece ai?? se você chamar o construtor em qualquer otra parte do programa funciona normal??

como ta o codigo do seu constructor??

agora o segundo erro acho q deve ta acontecendo porque ele não ta reconhecendo o overload q ele não conseguiu compilar.

ou senao tem algum problema com os tipos. tipo, achei essa parte da mensagem estranha:

Point::operator-(Point&)(((Point&)(& eye)))

por acaso eye não é um pontero não??

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...