Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: manri98 en 29 Septiembre 2014, 21:08 pm



Título: Ayuda con error de compilación: invalid types ‘float[int]’ for array subscript
Publicado por: manri98 en 29 Septiembre 2014, 21:08 pm
Buenas noches. Advierto que soy muy novato y no tengo mucha idea :-(
Estoy haciendo un módulo de un programa para un trabajo voluntario de clase, y a la hora de compilar me devuelve:
ERROR on page main at line 11, col 22: invalid types ‘float[int]’ for array subscript
ERROR on page main at line 12, col 22: invalid types ‘float[int]’ for array subscript
¿Se refiere a que el índice el 0 y el 1 no los considera int?
Código
  1. float position[3];
  2. float attitude[3];
  3. int counter;
  4. int contador;
  5.  
  6. float ControlLlamarada(int counter,float position){
  7.    int FlareCounter = 0;
  8.    if(counter == 30){
  9.        game.getNextFlare(FlareCounter);
  10.        if(FlareCounter <= 10){
  11.           position[0] = 0;
  12.           position[1] = 0.5;
  13.        }
  14.    }
  15.    return position;
  16. }
  17.  
  18. void VaciadoMemoria(){
  19.    int MemorySize = 0;
  20.    game.getMemorySize(MemorySize);
  21.    if (MemorySize == 2){
  22.        game.uploadPic();
  23.    }
  24. }
  25.  
  26. void init(){
  27.    position[0]=-0.380;
  28.    position[1]=0;
  29.    position[2]=0;
  30.    attitude[0]=0;
  31.    attitude[1]=0;
  32.    attitude[2]=0;
  33.    counter=0;
  34.    contador=0;
  35. }
  36.  
  37. void loop(){
  38.    /////
  39.    float ControlSphereLimit[12];
  40.    api.getMyZRState(ControlSphereLimit);
  41.  
  42.    if (ControlSphereLimit[0]== -0.64 || 0.64){
  43.        position[0] = 0;
  44.    }
  45.    if (ControlSphereLimit[1]== -0.8 || 0.8){
  46.        position[1] = 0;
  47.    }
  48.    /////
  49.    int llamaloop = 0;
  50.    ControlLlamarada(counter, position);
  51.    position = ControlLlamarada(counter, position);
  52.    if(position[0]==0 && position[1]==0.5 && counter > 30){
  53.        position[0]=0.5;
  54.        position[1]=0;
  55.        game.getNextFlare(llamaloop);
  56.        if(llamaloop == 1){
  57.            contador = counter;
  58.            if((contador+4)==counter){
  59.            position[0]=0;
  60.            position[1]=0.5;
  61.            }
  62.        }
  63.    }
  64.    VaciadoMemoria();
  65. game.getPOILoc(attitude, 1);
  66.    api.setPositionTarget(position);
  67.    api.setAttitudeTarget(attitude);
  68.    counter++;
  69.  
  70. }


Título: Re: Ayuda con error de compilación: invalid types ‘float[int]’ for array subscript
Publicado por: avesudra en 29 Septiembre 2014, 21:22 pm
Hola respondiendo primero a tu pregunta, aunque pueda parecer que es que no trata al 0 o al 1 como enteros no es eso.

El problema es que la variable posición no la estás definiendo como array en el argumento de la función, entonces te la trata como un simple float. Como supongo que estás empezando no te lo voy a poner con punteros, pero ten en cuenta que debes saber el largo del array si no quieres acceder a una dirección de memoria no reservada y obtener un error:
Código
  1. float ControlLlamarada(int counter,float position[] /**<-------------- Aquí está el fallo*/){
  2.   int FlareCounter = 0;
  3.   if(counter == 30){
  4.       game.getNextFlare(FlareCounter);
  5.       if(FlareCounter <= 10){
  6.          position[0] = 0;
  7.          position[1] = 0.5;
  8.       }
  9.    return position;
  10.   }

Un saludo.


Título: Re: Ayuda con error de compilación: invalid types ‘float[int]’ for array subscript
Publicado por: manri98 en 29 Septiembre 2014, 21:26 pm
Gracias! Supongo que tambien tengo que añadir [] en el return, no?
Código
  1. float ControlLlamarada(int counter,float position[]){
  2.   int FlareCounter = 0;
  3.   if(counter == 30){
  4.       game.getNextFlare(FlareCounter);
  5.       if(FlareCounter <= 10){
  6.          position[0] = 0;
  7.          position[1] = 0.5;
  8.       }
  9.   }
  10.   return position[];
  11. }
  12.  


Título: Re: Ayuda con error de compilación: invalid types ‘float[int]’ for array subscript
Publicado por: avesudra en 29 Septiembre 2014, 21:28 pm
Gracias! Supongo que tambien tengo que añadir [] en el return, no?
No, no es necesario (no está bien vamos) pues poniendo solo posicion estás pasando la dirección de memoria del primer elemento del array. Pero si debes poner en el valor de retorno esto:
Código
  1. float* ControlLlamarada(int counter,float position[] /**<-------------- Aquí está el fallo*/)
  2. {
  3.    int FlareCounter = 0;
  4.    if(counter == 30)
  5.    {
  6.        game.getNextFlare(FlareCounter);
  7.        if(FlareCounter <= 10)
  8.        {
  9.            position[0] = 0;
  10.            position[1] = 0.5;
  11.        }
  12.        return position;
  13.    }
  14. }
Cuando en C tu pones:
Código
  1. array[0];
Estás accediendo al valor del elemento de ese array en la posición cero. Y eso es lo mismo que poner:
Código
  1. *array;
Pero eso ya son punteros y no viene al caso, si quieres me puedes preguntar por privado  ;)
Un saludo.


Título: Re: Ayuda con error de compilación: invalid types ‘float[int]’ for array subscript
Publicado por: manri98 en 29 Septiembre 2014, 21:35 pm
 Solucionado ;D Miraré el uso de punteros poco a poco por mi cuenta. Muchas gracias