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.
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.
struct cabecera {
int PosInicioMarca;
int LongMarca;
char *Marca; //[LongMarca*sizeof(char)];
char *Comentario; //[100*sizeof(char)];
};
ó
struct cabecera {
int PosInicioMarca;
int LongMarca;
char Marca[VALOR];
char Comentario[VALOR];
};
No necesitas utilizar el operador sizeof() puedes asignarle el valor directamente sin "calcularlo".
Un ejemplo usando asignación dinámica de memoria:
#include <stdio.h>
#include <stdlib.h>
struct cabecera {
int PosInicioMarca;
int LongMarca;
char *Marca; //[LongMarca*sizeof(char)];
char *Comentario; //[100*sizeof(char)];
};
int main(void)
{
struct cabecera tmp;
tmp.LongMarca = 10;
/* Les asignamos espacio en memoria a las cadenas */
tmp.Marca = malloc(sizeof(char) * tmp.LongMarca);
tmp.Comentario = malloc(sizeof(char) * 100);
/* Proceso ... */
/* Liberación de la memoria ocupada */
free(tmp.Marca);
free(tmp.Comentario);
return 0;
}
Muchas gracias, me has sido de gran utilidad, ya sigo avanzando con el programa.
;-) ;-)