Ayuda con error de compilación: invalid types ‘float[int]’ for array subscript

Iniciado por manri98, 29 Septiembre 2014, 21:08 PM

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

manri98

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?

float position[3];
float attitude[3];
int counter;
int contador;

float ControlLlamarada(int counter,float position){
    int FlareCounter = 0;
    if(counter == 30){
        game.getNextFlare(FlareCounter);
        if(FlareCounter <= 10){
           position[0] = 0;
           position[1] = 0.5;
        }
    }
    return position;
}

void VaciadoMemoria(){
    int MemorySize = 0;
    game.getMemorySize(MemorySize);
    if (MemorySize == 2){
        game.uploadPic();
    }
}

void init(){
    position[0]=-0.380;
    position[1]=0;
    position[2]=0;
    attitude[0]=0;
    attitude[1]=0;
    attitude[2]=0;
    counter=0;
    contador=0;
}

void loop(){
    /////
    float ControlSphereLimit[12];
    api.getMyZRState(ControlSphereLimit);
   
    if (ControlSphereLimit[0]== -0.64 || 0.64){
        position[0] = 0;
    }
    if (ControlSphereLimit[1]== -0.8 || 0.8){
        position[1] = 0;
    }
    /////
    int llamaloop = 0;
    ControlLlamarada(counter, position);
    position = ControlLlamarada(counter, position);
    if(position[0]==0 && position[1]==0.5 && counter > 30){
        position[0]=0.5;
        position[1]=0;
        game.getNextFlare(llamaloop);
        if(llamaloop == 1){
            contador = counter;
            if((contador+4)==counter){
            position[0]=0;
            position[1]=0.5;
            }
        }
    }
    VaciadoMemoria();
game.getPOILoc(attitude, 1);
    api.setPositionTarget(position);
    api.setAttitudeTarget(attitude);
    counter++;

}
(\/)4|\|r1 98
-Cuantos dálmatas había en la peli?
-101
-por el culo te la hinco

avesudra

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:
float ControlLlamarada(int counter,float position[] /**<-------------- Aquí está el fallo*/){
  int FlareCounter = 0;
  if(counter == 30){
      game.getNextFlare(FlareCounter);
      if(FlareCounter <= 10){
         position[0] = 0;
         position[1] = 0.5;
      }
   return position;
  }


Un saludo.
Regístrate en

manri98

Gracias! Supongo que tambien tengo que añadir [] en el return, no?

float ControlLlamarada(int counter,float position[]){
   int FlareCounter = 0;
   if(counter == 30){
       game.getNextFlare(FlareCounter);
       if(FlareCounter <= 10){
          position[0] = 0;
          position[1] = 0.5;
       }
   }
   return position[];
}
(\/)4|\|r1 98
-Cuantos dálmatas había en la peli?
-101
-por el culo te la hinco

avesudra

Cita de: manri98 en 29 Septiembre 2014, 21:26 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:
float* ControlLlamarada(int counter,float position[] /**<-------------- Aquí está el fallo*/)
{
    int FlareCounter = 0;
    if(counter == 30)
    {
        game.getNextFlare(FlareCounter);
        if(FlareCounter <= 10)
        {
            position[0] = 0;
            position[1] = 0.5;
        }
        return position;
    }
}

Cuando en C tu pones:
array[0];
Estás accediendo al valor del elemento de ese array en la posición cero. Y eso es lo mismo que poner:
*array;
Pero eso ya son punteros y no viene al caso, si quieres me puedes preguntar por privado  ;)
Un saludo.
Regístrate en

manri98

 Solucionado ;D Miraré el uso de punteros poco a poco por mi cuenta. Muchas gracias
(\/)4|\|r1 98
-Cuantos dálmatas había en la peli?
-101
-por el culo te la hinco