Foro de elhacker.net

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
  1. int Centidad::aloadimagen(char *file,int fmin, int fmax){
  2. // AQUI ES EL ERROR
  3.    char salida[strlen(file)];
  4.    for(int i=fmin;i<fmax;i++){
  5.        remlet('-',file,salida,i+1);
  6.        plantilla[i]=IMG_Load(salida);
  7.    }
  8. }

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
  1.  
  2. int Centidad::aloadimagen(char *file,int fmin, int fmax){
  3. // AQUI ES EL ERROR
  4.    char salida[strlen(file)];
  5.    for(int i=fmin;i<fmax;i++){
  6.        remlet('-',file,salida,i+1);
  7.        plantilla[i]=IMG_Load(salida);
  8.    }
  9. }
  10. aloadimagen("foto",9,12);
  11.  
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
  1. int remlet(char buscar,char* entrada, char* salida,int num){
  2.    char conv[2];
  3.    for(int i=0;i<strlen(entrada);i++){
  4.        if(entrada[i]==buscar){
  5.            strcpy(salida,entrada);
  6.            itoa(num,conv,10);
  7.            if(num<10){
  8.                salida[i+1]='0';
  9.                salida[i+2]=conv[0];
  10.            }
  11.            else {
  12.                salida[i+1]= conv[0];
  13.                salida[i+2]= conv[1];
  14.            }
  15.            return 1;
  16.        }
  17.    }
  18.    return 0;
  19. }

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
  1. int fun(){
  2. }
  3.  

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