Ir para conteúdo

POWERED BY:

Arquivado

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

Rickbyte

[Resolvido] Como inicilizar membro de estruturas?

Recommended Posts

Bom dia pessoal. Sou novo no Fórum e iniciante em C.

 

Tenho uma dúvida que não consegui resolver mesmo consultando livros. Declarei a seguinte estrutura:

 

 

 

#define a 50

 

/* ***** Esturura Eleitores ***** */

struct cadastro {

char nome[80];

int titulo;

int zona;

int secao;

};

struct cadastro eleitor[a];

 

Preciso inicializar o membro nome[80] com "Vazio"

Tentei da seguinte maneira

 

/* ***** Esturura Eleitores ***** */

struct cadastro {

char nome[80]="Vazio";

int titulo;

int zona;

int secao;

};

struct cadastro eleitor[a];

 

 

Mas ta dando erro na momento de compilar (estou usando o Visual Studio 2005), a mensagem é a seguinte:

error C2864: 'cadastro::nome' : only static const integral data members can be initialized within a class

Não sei mais como fazer. Já tentei fazer um laço para atribuir mas também da erro.

 

Como eu posso inializar o membro da estrutura?

 

Desde já grato!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

na declaração da struct, declare nome como um ponteiro:

 

char *nome;

 

depois faça alocação dinâmica de memória com alloc() ou malloc(), ou, no caso do C++, new()

 

nome=new char[80];

 

daí, pode fazer uma laço para preencher o lixo com zeros ou espaços, ou o com o ascii que representa o fim de lina (CL, ou CR).

 

Ou se achar mais cômodo, use a bliblioteca padrão para strings...

 

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aew cara, seguinte, nao sei se entedi bem, mas voce quer zerar ela dentro da propria declaracao da estrutura? Isso nao eh permitido, como seu proprio compilador avisa, apenas variaveis constantes podem ser inicializadas na declaracao da estrutura.

Entao eu sugiro q voce crie um construtor para a struct, q ira zerar todos os valores por exemplo.

struct teste
{
   int num;
   char frase[80];
   bool ativa;
   teste() // inicio do contrutor
   {
	  frase[0] = '\'; // como o kandrade falou
	  num = 0;
	  ativa = false;
   } // fim do construtor


};

entao, agora toda vez q uma variavel do tipo teste for criada, o valor de seus variaveis ja estarao zerados. Lembrando q o contrutor eh chamado automaticamente quando uma variavel do tipo de dado eh declarada.

Lembrando 2: onde esta escrito '/ ' na verdade eh BARRA ZERO, esse forum tem um bugzinho ai... '/0'

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aew cara, seguinte, nao sei se entedi bem, mas voce quer zerar ela dentro da propria declaracao da estrutura? Isso nao eh permitido, como seu proprio compilador avisa, apenas variaveis constantes podem ser inicializadas na declaracao da estrutura.

Entao eu sugiro q voce crie um construtor para a struct, q ira zerar todos os valores por exemplo.

struct teste
{
   int num;
   char frase[80];
   bool ativa;
   teste() // inicio do contrutor
   {
	  frase[0] = '\'; // como o kandrade falou
	  num = 0;
	  ativa = false;
   } // fim do construtor


};

entao, agora toda vez q uma variavel do tipo teste for criada, o valor de seus variaveis ja estarao zerados. Lembrando q o contrutor eh chamado automaticamente quando uma variavel do tipo de dado eh declarada.

Lembrando 2: onde esta escrito '/ ' na verdade eh BARRA ZERO, esse forum tem um bugzinho ai... '/0'

Obrigado pela ajuda.

Como a variavel estrutura que criei é uma matriz, não precisarei rodar um laço for para zerar tudo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se fosse uma matriz de inteiros precisaria zerar todos elementos, mas como é uma matriz de caracteres ou vetor de caracteres ou mesmo uma string voce só precisa zerar como foi dito acima.

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

 

Obrigado pela ajuda.

Como a variavel estrutura que criei é uma matriz, não precisarei rodar um laço for para zerar tudo?

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.