Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: anonimo12121 en 14 Mayo 2010, 21:44 PM

Título: [ERROR VS2008] En dev-c++ me va bien y codeblock = en vs2008 no.
Publicado por: anonimo12121 en 14 Mayo 2010, 21:44 PM
aqui va 1 error.

1>c:\documents and settings\usuario1\escritorio\proyectos vs2008 sdl\entidad.h(91) : error C2057: se esperaba una expresión constante
1>c:\documents and settings\usuario1\escritorio\proyectos vs2008 sdl\entidad.h(91) : error C2466: no se puede asignar una matriz de tamaño constante 0
1>c:\documents and settings\usuario1\escritorio\proyectos vs2008 sdl\entidad.h(91) : error C2133: 'salida' : tamaño desconocido


code:
Código (cpp) [Seleccionar]
int Centidad::aloadimagen(char *file,int fmin, int fmax){
// AQUI ES EL ERROR
    char salida[strlen(file)];
    for(int i=fmin;i<fmax;i++){
        remlet('-',file,salida,i+1);
        plantilla[i]=IMG_Load(salida);
    }
}


espero que me puedan ayudar ,

SALUDOS.
Título: Re: [ERROR VS2008] En dev-c++ me va bien y codeblock = en vs2008 no.
Publicado por: do-while en 14 Mayo 2010, 22:00 PM
¡Buenas!

Nunca he utilizado VS, pero por el segundo y tercer error, me da la impresion de que no te deja definir la dimension del vector utilizando strlen, y por el primero, tendrias que usar una constante para definir el tamaño, no una expresion...

¡Saludos!
Título: Re: [ERROR VS2008] En dev-c++ me va bien y codeblock = en vs2008 no.
Publicado por: anonimo12121 en 15 Mayo 2010, 10:25 AM
pero por que con otros si?.
en codeblocks a mi amigo le compila y ami en dev-cpp no me a dado ningun problema .
para el numero de caracteres de "char*" usando strlen.


EDITO: e probado a crear un int y darle el valor que devuelve strlen.

pero me salta lo mismo.
Título: Re: [ERROR VS2008] En dev-c++ me va bien y codeblock = en vs2008 no.
Publicado por: Lambda en 15 Mayo 2010, 15:40 PM
No se puede hacer eso, es totalmente absurdo mas que nada por que el compilador tiene que saber el tamaño del array en tiempo de compilacion y strlen es una funcion que se ejecuta en tiempo de ejecucion, es imposible que compile en VS o en GCC o cualquier otro compilador almenos que el propio compilador haga algun trapicheo y te convierta esa variable de stack a heap.

Si quieres hacer eso usa memoria dinamica.
Título: Re: [ERROR VS2008] En dev-c++ me va bien y codeblock = en vs2008 no.
Publicado por: anonimo12121 en 15 Mayo 2010, 16:15 PM
entoces que puedo hacer?.
ejemplo de lo que aria mi funcion.
Código (cpp) [Seleccionar]


int Centidad::aloadimagen(char *file,int fmin, int fmax){
// AQUI ES EL ERROR
    char salida[strlen(file)];
    for(int i=fmin;i<fmax;i++){
        remlet('-',file,salida,i+1);
        plantilla[i]=IMG_Load(salida);
    }
}
aloadimagen("foto",9,12);

char*file seria el valor devuelto por strlen seria 5.
el bucle de abajo con una funcion mia llamada remlet "remplazarletra".
hace lo siguiente:

Código (cpp) [Seleccionar]
int remlet(char buscar,char* entrada, char* salida,int num){
    char conv[2];
    for(int i=0;i<strlen(entrada);i++){
        if(entrada[i]==buscar){
            strcpy(salida,entrada);
            itoa(num,conv,10);
            if(num<10){
                salida[i+1]='0';
                salida[i+2]=conv[0];
            }
            else {
                salida[i+1]= conv[0];
                salida[i+2]= conv[1];
            }
            return 1;
        }
    }
    return 0;
}


resumiendo lo que quiero es que char salida[] tenga una longitud = a la cadena insertada en char*entrada.

alguna idea?.
Título: Re: [ERROR VS2008] En dev-c++ me va bien y codeblock = en vs2008 no.
Publicado por: Lambda en 15 Mayo 2010, 23:24 PM
usa char* salida = new char[strlen(file)+1];

pero acuerdate de usar delete[] cuando no necesites esa variable por que si no tendras un memory leak :xD
otra cosa que puedes hacer es declarar el buffer con un tamaño fijo que sea "seguro".
Título: Re: [ERROR VS2008] En dev-c++ me va bien y codeblock = en vs2008 no.
Publicado por: anonimo12121 en 16 Mayo 2010, 00:01 AM
ok ahora mismo lo pruebo y te digo.
EDITO: me funciono XDDDD. muuuuuuuuuuchas gracias XD ,

aunque despues de esto me salto 1 error raro en otras funcion por ejemplo:

Código (cpp) [Seleccionar]

int fun(){
}


ERROR : int fun() tiene que devolver un return .

o algo similar , puse return 0. y lo solucciones

EDITO:
PD: se me olvido poner el delete XD


EDITO: CODE que toy haciendo ...  code y exe. code si compilais funcionara "SDL" el exe no se si os funcionara u os ara falta las DLL puesto que no se como crea los exe el VS2008 . tecla "a" para que pege una patada. LINK http://www.4shared.com/file/Tb8P93f7/Proyectos_VS2008_SDL.html