Ir ao conteúdo

Eroo de compilação no prpjeto metodoconst em C++


joubet

Posts recomendados

Postado

:(

Considere o projeto abaixo, e seus erros de compilação. Gostaria de ajuda para corrigir os erros, os quais estou com dificuldade de resolver.

Arquivo metodoconst.cpp

 

===================
/*- Mostra o uso do método construtor para inicializar atributos do objeto.
TNumeroRandomico:: TNumeroRandomico( const int _semente_const = 1 )
:semente_const(_semente_const)
- Neste exemplo, duas funções da biblioteca de C,
a srand(semente_const); e a rand();
e dois atributos, semente_const e random , são encapsulados
(agrupados) para formar um objeto RandomGenerator, um objeto gerador de números
aleatórios.
*/
#include "metodoconst.h"
// Construtor
TNumeroRandomico::TNumeroRandomico (const int _semente_const = 1):
_semente_const ( _semente_const)
// <- Precisa inicializar o atributo constante
{
random = 0;
srand ( _semente_const);
}
//Update gera um novo número randômico e armazena em random
void TNumeroRandomico::Update ()
{
random = rand ();
}
//Função main
int main ()
{
cout << "\nEntre com uma semente:" << endl;
int semente = 0;
cin >> semente;
cin.get ();
TNumeroRandomico gerador ( semente);
cout << "Valor da semente: " << gerador.Getsemente () << endl;
cout << "Valor inicial: " << gerador.GetRandomNumber () << endl;
for (int a = 0; a < 15; a++)
{
gerador.Update ();
cout << "gerador.GetRandomNumber(" << setw (3) << a << ")=" << setw (15)
<< gerador.GetRandomNumber () << endl;
}
return 0;
}

Arquivo metodoconst.h

==================

 
#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
using std::setw;
#include <cstdlib>
// ---------------------------------------------------------------Arquivo *.h
// ---------------------------------------------------------------Classe
class TNumeroRandomico
{
// ---------------------------------------------------------------Atributos
private:
//Atributo normal
double random;
//Atributo constante
const int semente_const;
// ---------------------------------------------------------------Métodos
public:
// Construtor com parâmetros
TNumeroRandomico ( const int semente_const = 1);
//Método const não muda o estado do objeto
double GetRandomNumber () const
{
return random;
};
const int Getsemente () const
{
return semente_const;
};
//Atualiza o número randômico
void Update ();
};

O erro cai na linha

TNumeroRandomico::TNumeroRandomico (const int _semente_const = 1):

Erros:

13 D:\C++\metodoconst.cpp default argument given for parameter 1 of `TNumeroRandomico::TNumeroRandomico(int)'

21 D:\C++\metodoconst.h after previous specification in `TNumeroRandomico::TNumeroRandomico(int)'

D:\C++\metodoconst.cpp In constructor `TNumeroRandomico::TNumeroRandomico(int)':

14 D:\C++\metodoconst.cpp class `TNumeroRandomico' does not have any field named `_semente_const'

16 D:\C++\metodoconst.cpp uninitialized member `TNumeroRandomico::semente_const' with `const' type `const int'

D:\C++\metodoconst.cpp In function `int main()':

30 D:\C++\metodoconst.cpp `cin' undeclared (first use this function)

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

D:\C++\G__~1.EXE metodoconst.o: No such file or directory.

D:\C++\G__~1.EXE no input files

Postado

Porque passar um valor pra uma função se na própria declaração do parâmetro você já inicializa o valor desse parâmetro?

Talvez aí que o compilador esteja se perdendo!

Se você já sabe que a variável vai SEMPRE ter o valor igual à 1, porque declará-la como um parâmetro de entrada?

TNumeroRandomico::TNumeroRandomico (const int _semente_const [B]= 1[/B]):

É mais fácil declarar a constante dentro da própria função:

TNumeroRandomico::TNumeroRandomico ( void ):
{
const int _semente_const = 1;
}

O que tb nem seria o caso! você pode (e deve, que é o que mais se usa) declarar uma constante através de um DEFINE

TNumeroRandomico::TNumeroRandomico ( void ):
{
#define _semente_const 1
}

Parâmetros passados pra uma função através do modificador CONST, instruem a função, de que aquele parâmetro não pode ser modificado em nenhum lugar da função, o que tb não faz sentido, uma vez que um parâmetro passado para uma função é passado por referência, quer dizer, é passada uma cópia do valor de entrada, o que permite que esse valor seja modificado dentro da função, mas, permaneça inalterado fora dela.

Passagem de parâmetros como constantes, na maioria das vezes só são utilizados quando se usa ponteiros!

[]'s

Postado

:(

Fiz as alterações sugeridas. Eu imaginava, que em C++, se pudesse passar constantes da mesma forma que parâmetros com valor default, e que construtores pudessem passar constantes. De qualquer forma ao fazer as mudanças, ainda ocorreram erro, que não compreendi. Se puder ajudar agradeço:

Eis o código atualizado:

Metodoconst.cpp

=============

 

/*- Mostra o uso do método construtor para inicializar atributos do objeto.
TNumeroRandomico:: TNumeroRandomico( const int _semente_const = 1 )
:semente_const(_semente_const)
- Neste exemplo, duas funções da biblioteca de C,
a srand(semente_const); e a rand();
e dois atributos, semente_const e random , são encapsulados
(agrupados) para formar um objeto RandomGenerator, um objeto gerador de números
aleatórios.
*/
#include "metodoconst.h"
// Construtor
TNumeroRandomico::TNumeroRandomico (void):
_semente_const ( _semente_const)
// <- Precisa inicializar o atributo constante
{
const int _semente_const = 1
random = 0;
srand ( _semente_const);
}
//Update gera um novo número randômico e armazena em random
void TNumeroRandomico::Update ()
{
random = rand ();
}
//Função main
int main ()
{
cout << "\nEntre com uma semente:" << endl;
int semente = 0;
cin >> semente;
cin.get ();
TNumeroRandomico gerador ( semente);
cout << "Valor da semente: " << gerador.Getsemente () << endl;
cout << "Valor inicial: " << gerador.GetRandomNumber () << endl;
for (int a = 0; a < 15; a++)
{
gerador.Update ();
cout << "gerador.GetRandomNumber(" << setw (3) << a << ")=" << setw (15)
<< gerador.GetRandomNumber () << endl;
}
return 0;
}

metodoconst.h

===========

 
#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
using std::setw;
#include <cstdlib>
// ---------------------------------------------------------------Arquivo *.h
// ---------------------------------------------------------------Classe
class TNumeroRandomico
{
// ---------------------------------------------------------------Atributos
private:
//Atributo normal
double random;
//Atributo constante
const int semente_const;
// ---------------------------------------------------------------Métodos
public:
TNumeroRandomico (void);
//Método const não muda o estado do objeto
double GetRandomNumber () const
{
return random;
};
const int Getsemente () const
{
return semente_const;
};
//Atualiza o número randômico
void Update ();
};

O erro cai na linha:

_semente_const ( _semente_const)

Erros:

D:\C++\metodoconst.cpp In constructor `TNumeroRandomico::TNumeroRandomico()':

14 D:\C++\metodoconst.cpp class `TNumeroRandomico' does not have any field named `_semente_const'

14 D:\C++\metodoconst.cpp `_semente_const' undeclared (first use this function)

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

16 D:\C++\metodoconst.cpp uninitialized member `TNumeroRandomico::semente_const' with `const' type `const int'

18 D:\C++\metodoconst.cpp expected `,' or `;' before "random"

D:\C++\metodoconst.cpp In function `int main()':

32 D:\C++\metodoconst.cpp `cin' undeclared (first use this function)

34 D:\C++\metodoconst.cpp no matching function for call to `TNumeroRandomico::TNumeroRandomico(int&)'

note D:\C++\metodoconst.h:11 candidates are: TNumeroRandomico::TNumeroRandomico(const TNumeroRandomico&)

note D:\C++\metodoconst.h:11 TNumeroRandomico::TNumeroRandomico()

D:\C++\G__~1.EXE metodoconst.o: No such file or directory.

D:\C++\G__~1.EXE no input files

Postado

Lamento, mas, eu não conheço C++ a ponto de poder te ajudar mais. Espero que alguém com mais experiência possa te aclarar.

Pelo menos uma das mensagens de erro pode ser minimizada. Faltou ponto-e-vírgula depois da declaração da constante _semente_const.

const int _semente_const = 1[B];[/B]

[]'s

Postado

:(

Ok. Marcio2006, já coloquei o ; onde você indicou. Mesmo assim obrigado. Deixarei o tópico ativo, caso algém esteja capacitado para dar uma resposta que ajude na resolução do problema

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!