Ir para conteúdo

POWERED BY:

Arquivado

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

Peixoto

[Resolvido] Passar valores retornados por função para construtor

Recommended Posts

A idéia básica é passar para parâmetros de um construtor, valores inseridos numa função de entrada de dados. Estes valores devem ser devolvidos pela função via retorno de um vetor. Os valores do vetor devem ser recebidos pelos parâmetros do construtor.

 

class Efetua_calculo
{
      private:
             double total;
             char texto[50];
             double soma();
             double divide();
             double Entra_valores (double *valorvet);

     public:
            void Mostra_calculo();
            Efetua_calculo             
            (double valora,double valorb,double valorc, double valord)
            {
             Entra_valores();               
              valora=valorvet[0];
              valorb=valorvet[1];
              valorc=valorvet[2];
              valord=valorvet[3];

              total=0;
              strcpy(texto,"Resultado das funcoes soma() e divide() e:");
            }
  };

double Efetua_calculo::Entra_valores (double *valorvet)
{
 double vet[4];
 int i=0;
 cout << "Entre com os valores das funções soma e divide." << endl;
 do
 {
      cin >> vet[i];
      i++;
 } while (i<4);

 for (i=0; i <4; i++)
 {
     valorvet[i]=vet[i];
 }    
 return (*valorvet);
}

void Efetua_calculo::Mostra_calculo (void)
{

 cout << texto << endl;
 cout << soma() << endl;
 cout << divide() << endl;
 return;
}


int main ()
{

  Efetua_calculo calculo();
 calculo.Mostra_calculo();
  return 0;  
}    

 

Erros:

 

D:\FonteLivroC++\Classe_Efetua_calculo_construtor_parametrizado.cpp In constructor `Efetua_calculo::Efetua_calculo(double, double, double, double)'

 

19 D:\FonteLivroC++\Classe_Efetua_calculo_construtor_parametrizado.cpp no matching function for call to `Efetua_calculo::Entra_valores()':

 

note D:\FonteLivroC++\\Classe_Efetua_calculo_construtor_parametrizado.cpp:12 candidates are: double Efetua_calculo::Entra_valores(double*)

 

20 D:\FonteLivroC++\Classe_Efetua_calculo_construtor_parametrizado.cpp `valorvet' undeclared (first use this function)

 

(Each undeclared identifier is reported only once for each function it appears in.)

 

D:\FonteLivroC++\Classe_Efetua_calculo_construtor_parametrizado.cpp In function `int main()'

 

81 D:\FonteLivroC++\Classe_Efetua_calculo_construtor_parametrizado.cpp request for member `Mostra_calculo' in `calculo', which is of non-class type `Efetua_calculo ()()':

 

 

Onde estou errando ?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de tentar passar valores para o construtor resolvi fazer a seguinte alteração:

 

 

class Efetua_calculo
{
      private:
             double total;
             char texto[50];
             double valores_entrada[4];
             double soma();
             double divide();
             double Retorna_valores (double *valorvet);

     public:
            void Entrada_Saida_calculo();
            Efetua_calculo()
            {
             valores_entrada[0]=0;
             valores_entrada[1]=0;
             valores_entrada[2]=0;
             valores_entrada[3]=0;                             
              total=0;
              strcpy(texto,"Resultado das funcoes soma() e divide() e:");
            }
  };

double Efetua_calculo:: Retorna_valores (double *valorvet)
{

 for (int i=0; i <4; i++)
 {
     valorvet[i]=valores_entrada[i];
 }    
 return (*valorvet);
}

void Efetua_calculo::Entrada_Saida_calculo (void)
{
 int i;
 cout << "Entre com os valores das funções soma e divide." << endl;
 do
 {
      cin >> valores_entrada[i];
      i++;
 } while (i<4);

 Retorna_valores (valores_entrada);   
 cout << texto << endl;
 cout << soma() << endl;
 cout << divide() << endl;
 return;
}


int main ()
{

 Efetua_calculo calculo;
 calculo.Entrada_Saida_calculo();


 return (0);
}   

Nesta versão não tem mais erro de compilação, mas erro em tempo de execução após eu entrar com o primeiro valor. Qual o erro ?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

class Efetua_calculo
{
      private:
             double total;
             double valores_entrada[4];
             double devolve_valores_entrada[4];
             char texto[50];
             double soma();
             double divide();

     public:

            double Entrada_valores(void);                             
            void Saida_calculo(void);


            Efetua_calculo(double recebe[]);

        };
            Efetua_calculo::Efetua_calculo(double recebe[])
            {

              total=0;
              strcpy(texto,"Resultado das funcoes soma() e divide() e:");

              recebe[0]=valores_entrada[0];
              recebe[1]=valores_entrada[1];
              recebe[2]=valores_entrada[2];
              recebe[3]=valores_entrada[3];


              devolve_valores_entrada[0]=recebe[0];
              devolve_valores_entrada[1]=recebe[1];
              devolve_valores_entrada[2]=recebe[2];
              devolve_valores_entrada[3]=recebe[3];
            }

double Efetua_calculo::Entrada_valores (void)
{
      int i=0;

 cout << "Entre com os valores das funções soma e divide." << endl;
 while (i<4) 
 {
      cin >> valores_entrada[i];
      i++;
 };

return (*valores_entrada); 
}  

void Efetua_calculo::Saida_calculo (void)
{

 cout << texto << endl;
 cout << soma() << endl;
 cout << divide() << endl;

 cout << "valores retornados do construtor: " <<endl;
 cout << devolve_valores_entrada[0] << endl;
 cout << devolve_valores_entrada[1] << endl;
 cout << devolve_valores_entrada[2] << endl;
 cout << devolve_valores_entrada[3] << endl;      
 return;
}


int main ()
{
 double inicializa[4]={0.0,0.0,0.0,0.0};

  //instancia a classe
 Efetua_calculo calculo(inicializa);
 calculo.Entrada_valores();                                 
 calculo.Saida_calculo();

    return (0);
}  

 

saída:

 

Entre com os valores das funções soma e divide

0

1

2

3

 

valores retornados do construtor:

1.06198e+292

2.68407e-309

5.28268e-308

5.28372e-308

Qual o motivo de aparecer lixo para as variáveis que pegam os valores recebidos pelo parâmetro do construtor ?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

calma ai deixa eu ver se eu entendi bem..

você fez isso:

            Efetua_calculo::Efetua_calculo(double recebe[])
            {

              total=0;
              strcpy(texto,"Resultado das funcoes soma() e divide() e:");

              recebe[0]=valores_entrada[0];
              recebe[1]=valores_entrada[1];
              recebe[2]=valores_entrada[2];
              recebe[3]=valores_entrada[3];


              devolve_valores_entrada[0]=recebe[0];
              devolve_valores_entrada[1]=recebe[1];
              devolve_valores_entrada[2]=recebe[2];
              devolve_valores_entrada[3]=recebe[3];
            }

 

Você recebe o vetor que chama 'recebe[]' e atribui um outro vetor que ainda não tem nd nele??

 

[]s

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.