Ir para conteúdo

POWERED BY:

Arquivado

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

Peixoto

Erro ao compilar programa – sobrecarga operador

Recommended Posts

: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

: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

Tenta colocar a implementação do construtor fora da declaração da classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

: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 '&' token

Sobrecarga_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

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

#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

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

: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

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

×

Informação importante

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