Peixoto 0 Denunciar post Postado Março 25, 2012 :o O programa abaixo apresentou erro de compilação após eu inserir um construtor. Vejam: #include <iostream> #include <cstdlib> using namespace std; class Sobrecarga { private: double x,y,n; public: Sobrecarga(double num){n = num;}; //Operadores unários Sobrecarga operator++(int); Sobrecarga operator++(); Sobrecarga operator--(int); Sobrecarga operator--(); //Operador binnario Sobrecarga operator+(Sobrecarga s1); }; Sobrecarga Sobrecarga::operator++() { this->x++; this->y++; return *this; } Sobrecarga Sobrecarga::operator++(int) { this->x++; this->y++; return *this; } Sobrecarga Sobrecarga::operator--(int) { this->x--; this->y--; return *this; } Sobrecarga Sobrecarga::operator--() { this->x--; this->y--; return *this; } Sobrecarga Sobrecarga::operator+(Sobrecarga s1) { Sobrecarga temp; temp.x=x + s1.x; temp.y=y + s1.y; return temp; } int main() { cout << "sobrecarga de operadores " << endl; Sobrecarga a(6); a++; return 0; } Erros: Sobrecarga_operador.cpp:51:13: error: no matching function for call to 'Sobrecarga::Sobrecarga()'Sobrecarga_operador.cpp:51:13: note: candidates are: Sobrecarga_operador.cpp:12:2: note: Sobrecarga::Sobrecarga(double) Sobrecarga_operador.cpp:12:2: note: candidate expects 1 argument, 0 provided Sobrecarga_operador.cpp:6:7: note: Sobrecarga::Sobrecarga(const Sobrecarga&) Sobrecarga_operador.cpp:6:7: note: candidate expects 1 argument, 0 provided Como resolver estes problemas ? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Março 25, 2012 6 é um int, coloque 6.0 que vai funcionar... Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Março 25, 2012 :ermm: Eu fiz: int main() { cout << "sobrecarga de operadores " << endl; Sobrecarga a(6.0); a++; return 0; } E ocorreram os seguintes erros: Sobrecarga_operador.cpp:51:13: error: no matching function for call to 'Sobrecarga::Sobrecarga()'Sobrecarga_operador.cpp:51:13: note: candidates are: Sobrecarga_operador.cpp:12:2: note: Sobrecarga::Sobrecarga(double) Sobrecarga_operador.cpp:12:2: note: candidate expects 1 argument, 0 provided Sobrecarga_operador.cpp:6:7: note: Sobrecarga::Sobrecarga(const Sobrecarga&) Sobrecarga_operador.cpp:6:7: note: candidate expects 1 argument, 0 provided Que estranho, mas mesmo eu passando um valor inteiro para um parâmetro double;não deveria haver conversão de tipo ? Eu pus um valor double e ocorreram os erros acima. que estaria acontecendo? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Março 25, 2012 Tenta colocar a implementação do construtor fora da declaração da classe. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Março 25, 2012 Se vce colocasse int, vce tinha que colocar um (double) na chamada para converter, tipos n são convertidos automaticamente... Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Março 26, 2012 Coloquei implementação da classe fora do construtor como sugerido, Vejam: using namespace std; class Sobrecarga { private: double x,y,n; public: Sobrecarga(double num); //Operadores unários Sobrecarga operator++(int); Sobrecarga operator++(); Sobrecarga operator--(int); Sobrecarga operator--(); //Operador binnario Sobrecarga operator+(Sobrecarga s1); }; Sobrecarga::Sobrecarga(double num) { n = num; } Os erros se mantêm os mesmos. Um ponto me chamou a atenção: Sobrecarga_operador.cpp:6:7: note: Sobrecarga::Sobrecarga(const Sobrecarga&) Parece requerer referência no protótipo da sobrecarga. Seria isso ? como se usa & em sobrecarga ? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Março 27, 2012 :upset: Mudei a declaração das funções na classe e em sua definição , ao longo do programa desta forma: class Sobrecarga { private: double x,y,n; public: Sobrecarga(double num); //Operadores unários Sobrecarga& operator++(int); Sobrecarga& operator++(); Sobrecarga& operator--(int); Sobrecarga& operator--(); //Operador binnario Sobrecarga& operator+(Sobrecarga s1); }; E os erros mudaram para: Sobrecarga_operador.cpp:27:22: error: expected initializer before '&' tokenSobrecarga_operador.cpp:34:22: error: expected initializer before '&' token Sobrecarga_operador.cpp:41:22: error: expected initializer before '&' token Sobrecarga_operador.cpp:48:22: error: expected initializer before '&' token O que estaria faltando ? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Março 27, 2012 Posta o arquivo completo, queremos saber qual linha está dando o erro. Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Março 28, 2012 Eis o programa completo: #include <iostream> #include <cstdlib> using namespace std; class Sobrecarga { private: double x,y,n; public: Sobrecarga(double num); //Operadores unários Sobrecarga& operator++(int); Sobrecarga& operator++(); Sobrecarga& operator--(int); Sobrecarga& operator--(); //Operador binnario Sobrecarga& operator+(Sobrecarga s1); }; Sobrecarga::Sobrecarga(double num) { n = num; } Sobrecarga Sobrecarga&::operator++() { this->x++; this->y++; return *this; } Sobrecarga Sobrecarga&::operator++(int) { this->x++; this->y++; return *this; } Sobrecarga Sobrecarga&::operator--(int) { this->x--; this->y--; return *this; } Sobrecarga Sobrecarga&::operator--() { this->x--; this->y--; return *this; } Sobrecarga Sobrecarga&::operator+(Sobrecarga s1) { Sobrecarga temp; temp.x=x + s1.x; temp.y=y + s1.y; return temp; } int main() { cout << "sobrecarga de operadores " << endl; Sobrecarga a(6.0); a++; return 0; } Os erros são os mesmos acima. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Março 29, 2012 #include <iostream> #include <cstdlib> using namespace std; class Sobrecarga { private: double x,y,n; public: Sobrecarga(double num); //Operadores unários Sobrecarga& operator++(int); Sobrecarga& operator++(); Sobrecarga& operator--(int); Sobrecarga& operator--(); //Operador binnario //Sobrecarga& operator+(Sobrecarga s1); }; Sobrecarga::Sobrecarga(double num) { n = num; } Sobrecarga& Sobrecarga::operator++() { this->x++; this->y++; return *this; } Sobrecarga& Sobrecarga::operator++(int) { this->x++; this->y++; return *this; } Sobrecarga& Sobrecarga::operator--(int) { this->x--; this->y--; return *this; } Sobrecarga& Sobrecarga::operator--() { this->x--; this->y--; return *this; } /* Sobrecarga& Sobrecarga::operator+(Sobrecarga s1) { s1.x += x; s1.y += y; return s1; } */ int main() { cout << "sobrecarga de operadores " << endl; Sobrecarga a(6.0); a++; return 0; } Veja bem como eu coloquei o &. Outra coisa: no operator+ você está retornando uma referência a uma variável local, isso é errado porque o local da memória onde a variável está passa a não ter mais o valor que você quer quando a função retorna. Então você tem que consertar isso, estou sem tempo =P Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Março 30, 2012 Ok, o programa está compilando. Este programa é como se fosse uma espécie de “frankstain”, pois venho montando os pedaços com ajuda de Pdfs da internet e resposta de forum. Agora que o programa compilou, preciso entender certas coisas. 1-Na linha: Sobrecarga& operator++(int); 2- Tentei mostra a saída de ++a mas não consegui. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Março 30, 2012 ++a e a++ são sobrecargas diferentes, você tem que criar uma outra sobrecarga. Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Março 31, 2012 :mellow: Reavaliei o trecho do programa em destaque, baseado em um pdf da internete. Entretanto não consegui resolver o problema da função em questão. class Sobrecarga { private: double x,y,n; public: Sobrecarga(double num); //Operadores unários Sobrecarga& operator++(int); Sobrecarga& operator++(); Sobrecarga& operator--(int); Sobrecarga& operator--(); //Operador binnario [color="#FF0000"]Sobrecarga& operator+(const Sobrecarga& s1) const;[/color] }; e fiz: Sobrecarga& Sobrecarga::operator+(Sobrecarga& s1) { Sobrecarga temp =new Sobrecarga; temp->x=this-> x + s1.x; temp->y=this-> y + s1.y; return *temp; } int main() { cout << "sobrecarga de operadores " << endl; Sobrecarga a(6.0); a++; return 0; } Estão ocorrendo os seguite erros: Sobrecarga_operador.cpp:54:14: error: prototype for 'Sobrecarga& Sobrecarga::operator+(Sobrecarga&)' does not match any in class 'Sobrecarga'Sobrecarga_operador.cpp:19:14: error: candidate is: Sobrecarga& Sobrecarga::operator+(const Sobrecarga&) const Que está errado ? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Abril 3, 2012 Foi dito que o problema do programa estar devolvendo valor com uma variável local. Fiz a seguinte alteração no código: declarei temp como membro de dados da classe, mas os erros permanecem. Que faço? Veja: class Sobrecarga { private: double x,y,n,temp; public: Sobrecarga(double num); //Operadores unários Sobrecarga& operator++(int); Sobrecarga& operator++(); Sobrecarga& operator--(int); Sobrecarga& operator--(); //Operador binnario Sobrecarga& operator+(Sobrecarga s1); }; Sobrecarga& Sobrecarga::operator+(Sobrecarga s1) { Sobrecarga temp; temp.x= x + s1.x; temp.y= y + s1.y; return temp; } Erros: Sobrecarga_operador.cpp:56:13: error: no matching function for call to 'Sobrecarga::Sobrecarga()'Sobrecarga_operador.cpp:56:13: note: candidates are: Sobrecarga_operador.cpp:22:1: note: Sobrecarga::Sobrecarga(double) Sobrecarga_operador.cpp:22:1: note: candidate expects 1 argument, 0 provided Sobrecarga_operador.cpp:6:7: note: Sobrecarga::Sobrecarga(const Sobrecarga&) Sobrecarga_operador.cpp:6:7: note: candidate expects 1 argument, 0 provided Sobrecarga_operador.cpp:56:13: warning: reference to local variable 'temp' returned [enabled by default] Poderiam corrigir ? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites