令牌前的预期标识符(

时间:2015-06-02 23:26:39

标签: c pointers

我一直收到错误

error: expected identifier before ‘(’ token
         if((familia->(hijos+i)->edad)>18)   
                     ^

我真的无法解决它,问题出在familia->但我不知道如何解决它。 这些是我正在使用的结构,我认为它应该足以理解:(

  typedef struct hijo{
     int va_a_la_escuela;
     int edad;
     int estaVacunado;          
     } hijo;

 typedef struct gasto{
 int vestimenta;
 int vivienda;
 int comida;    
 } gasto;

 typedef struct familia{
   int numero_de_hijos;  
   hijo* hijos;
   gasto* gastos;
int recibeBono;
 int revisada;  
 } familia;

 int verificarVacuna(familia* familia){
      int i;
      for (i = 0; i < familia->numero_de_hijos; i++) {
        if(familia->(hijos+i)->estaVacunado==0)//LINE OF ERROR
          return 0;
      }
     return 1;
    }


//VERIFICACION DE EDAD DE HIJOS DE LA FAMILIA
int verificarEdad(familia* familia){
  int i;
  for (i = 0; i < familia->numero_de_hijos; i++) {
    if(familia->(hijos+i)->edad>18) //LINE OF ERROR
      return 0;
  }
 return 1;
}

4 个答案:

答案 0 :(得分:4)

  • 我认为在familia->hijos中,hijos是一个数组,所以也许你的意思是

    familia->hijos[i].estaVacunado
    
  • 或者您可能想要使用指针算法,可以是

    (familia->hijos + i)->estaVacunado
    
  • 或者如果它是一个指针数组

    familia->hijos[i]->estaVacunado
    
  • 或指针数组,使用指针算法

    (*(familia->hijos + i))->estaVacunado
    

答案 1 :(得分:2)

您的意思是使用familia->hijos[i]->edad等语法。

答案 2 :(得分:0)

->的左操作数是一个表达式;它必须是指向结构或联合的指针。

->的右操作数不是任意表达式;它只能是一个标识符,它必须是struct或union成员的名称。

您的子表达式

familia->(hijos+i)
因此

无效。你可能想要

familia->hijos

我们知道familia的类型为familia*(BTW,对于类型和对象使用相同的名称,指向该对象的指针可能会令人困惑)。如果没有看到您的类型familia是如何定义的,那么就不可能确切地确定您应该写什么。

答案 3 :(得分:-1)

要保留指针语法,您还可以使用familia->*(hijos + 1)->estaVacunado

这相当于familia->hijos[i]->estaVacunado