Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: hari en 30 Junio 2011, 17:39 pm



Título: DUDA invalid use of non-static member
Publicado por: hari en 30 Junio 2011, 17:39 pm
Hola,
estaba haciendo un sencillo programa en el cual necesitaba crear una estructura, la he creado en el .h y he puesto:
struct cabecera {
   int PosInicioMarca;
   int LongMarca;
   char Marca[LongMarca*sizeof(char)];
   char Comentario[100*sizeof(char)];
};

Al compilarlo me da los siguientes errores:
invalid use of non-static member 'cabecera::LongMarca'
array bound is not an integer constant before ']' token make: ***[obj/main] Error 1


Muchas gracias.


Título: Re: DUDA invalid use of non-static member
Publicado por: leogtz en 30 Junio 2011, 18:38 pm
No puedes hacer eso, ya que LongMarca no tiene un valor inicial. Además de que sería mejor que utilizaras un puntero al tipo que utilizas.

Código
  1. struct cabecera {
  2.   int PosInicioMarca;
  3.   int LongMarca;
  4.   char *Marca; //[LongMarca*sizeof(char)];
  5.   char *Comentario; //[100*sizeof(char)];
  6. };

ó

Código
  1. struct cabecera {
  2.   int PosInicioMarca;
  3.   int LongMarca;
  4.   char Marca[VALOR];
  5.   char Comentario[VALOR];
  6. };

No necesitas utilizar el operador sizeof() puedes asignarle el valor directamente sin "calcularlo".

Un ejemplo usando asignación dinámica de memoria:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct cabecera {
  5.   int PosInicioMarca;
  6.   int LongMarca;
  7.   char *Marca; //[LongMarca*sizeof(char)];
  8.   char *Comentario; //[100*sizeof(char)];
  9. };
  10.  
  11. int main(void)
  12. {
  13.    struct cabecera tmp;
  14.    tmp.LongMarca = 10;
  15.  
  16.    /* Les asignamos espacio en memoria a las cadenas */
  17.    tmp.Marca = malloc(sizeof(char) * tmp.LongMarca);
  18.    tmp.Comentario = malloc(sizeof(char) * 100);
  19.  
  20.    /* Proceso ... */
  21.  
  22.    /* Liberación de la memoria ocupada */
  23.    free(tmp.Marca);
  24.    free(tmp.Comentario);
  25.  
  26.    return 0;
  27. }
  28.  


Título: Re: DUDA invalid use of non-static member
Publicado por: hari en 30 Junio 2011, 19:13 pm
Muchas gracias, me has sido de gran utilidad, ya sigo avanzando con el programa.

 ;-) ;-)