DUDA invalid use of non-static member

Iniciado por hari, 30 Junio 2011, 17:39 PM

0 Miembros y 1 Visitante están viendo este tema.

hari

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.

leogtz

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;
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

hari

Muchas gracias, me has sido de gran utilidad, ya sigo avanzando con el programa.

;-) ;-)