C语言 expected identifier before token (



我一直得到错误

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

我真的解决不了,问题出在家里->但我不知道怎么解决。这些是我正在使用的结构体,我认为它应该足以理解:(

  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;
}
  • 我假设在familia->hijos中,hijos是一个数组,所以也许你的意思是

    familia->hijos[i].estaVacunado
    
  • 或者你想使用指针运算,它可以是

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

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

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

你肯定是想使用像familia->hijos[i]->edad这样的语法

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

->的右操作数不是任意表达式;它只能是一个标识符,并且必须是结构体或联合的成员名。

你的子表达式

familia->(hijos+i)
因此

无效。你可能想要

familia->hijos

我们知道familiafamilia*类型(顺便说一句,对类型和指向该对象的指针的对象使用相同的名称可能会引起混淆)。如果没有看到类型familia是如何定义的,就不可能确切地确定应该写什么。

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

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

相关内容

最新更新