Título: Matriz estática Publicado por: ricardo2013 en 24 Octubre 2012, 20:40 pm Código
El error: Código: error: storage size of ‘cadena’ isn’t constant ¿Por qué me da este error? Sin embargo si quito el static, no da error. El motivo de querer que sea static es para hacer algo similar a esto: Código
m_nombre es un atributo de la clase "Clase" y que está definido de la siguiente forma: Código
Defino el array nom estático, para que el usuario de la clase no tenga que preocuparse de liberar memoría con delete. Estoy obligado a usar char * y no std::string. Gracias de antemano Título: Re: Matriz estática Publicado por: NeoB en 24 Octubre 2012, 21:38 pm No entiendo por que hacerlo estático. Es mas, si no lo haces estático, se liberará la memoria al salir de la función automáticamente y no lo tendrás que hacer, no?
Perdona si no he interpretado bien tu mensaje. Título: Re: Matriz estática Publicado por: x64core en 24 Octubre 2012, 22:41 pm Necesitas un valor constante:
Código: const int a = 5; las variables locales se eliminan automaticamente Título: Re: Matriz estática Publicado por: ricardo2013 en 25 Octubre 2012, 00:05 am Muchas gracias a los dos por la ayuda.
ya he visto el error, me he hecho un lío espantoso, el problema está que no puedo usar strlen para iniciar el array estático, ya que el tamaño se calcula en tiempo de ejecución (strlen) y hay que fijarlo en tiempo de compilación, de ahí que precise una constante. NeoB, el hacerlo static es para no tener que usar new y memoria dinámica, ya que si lo utilizo, fuera del método hay que usar delete explícitamente. Hay un error en mi primer post, era así el código que compile: Código
Un saludo Título: Re: Matriz estática Publicado por: x64core en 25 Octubre 2012, 00:33 am Declarando como Static no tiene que ver nada con new y delete ni memoria dinamica, si declaras una variable como static
esa variable mantiene su valor entre multiples llamadas y es eliminada solo cuando el programa termina, como dije las variables locales se eliminan automáticamente cuando de retorna de la funcion a las que pertenecen, estas confundido. acerca de hacer un array dinamico local es posible, pero no seria portable, algunos compiladores lo permiten pero otros no, así igual que hacerlo con ensamblador en linea, eso es posible pero tu codigo no seria portable. pero si te interesa hacer como digo, aquí esta el codigo: int function(int param1 , int param2) { ULONG l = strlen("test"); VOID* lps = 0; __asm mov eax,l __asm sub esp,eax __asm mov eax,esp __asm mov lps,eax // ahora lps apunta a tu array dinamico local } PD: recuerda eliminarlo antes del marco de la pila ( si indicaste al compilador que lo hiciera ) Título: Re: Matriz estática Publicado por: naderST en 25 Octubre 2012, 03:16 am El calificador static declara la variable como global, pero solo será visible por el bloque donde se declaró. En C/C++ debes definir un tamaño constante a los arreglos globales.
|