-2

いくつかのコンパイル エラーが発生していますが、それらを理解できません。おそらく簡単なことですが、理解できません。ポインターへの参照を変更する必要があると推測していますが、正確にはわかりません。ポインターを変更しようとしましたが、それでもエラーが発生します。助けていただければ幸いです。これらのエラーは次のとおりです。

  passing argument 1 of 'compare' from incompatible pointer type
  expected 'struct person *' but argument is of type 'char *'
  passing argument 2 of 'compare' from incompatible pointer type
  expected 'struct person *' but argument is of type 'char *'


  struct person *insert(struct person *head, char *personName, int personAge, int        (*compare)(struct person *a, struct person *b)) 
  {  
    struct person *new;

    new = (struct person*)malloc(sizeof(struct person));
    if(new == NULL)
    fprintf(stderr,"Couldn't allocate memory!");

    new->name = personName;
    new->age = personAge;  

    if(head == NULL)
    { 
      new->next = head;
      head = new; 
    }

    else
    {
      while(head != NULL)
      head = head->next;

      //compile errors
      if(compare(new->name,head->name) < 0)
      { 
        new->next=head;
     head->next=NULL;
      }

      else
      {
        head->next = new;
        new->next = NULL;
      }
    }//else  
      return head;

  }//method



  //----------------------------compare--------------------------------//
   int compare(struct person *a, struct person *b)
   {
      int result = strcmp(a->name, b->name);
      return result;
   }
4

3 に答える 3

2

compare(new->name,head->name)に置き換えてみてくださいcompare(new, head)

于 2012-09-10T12:04:23.413 に答える
2

compare(new,head)代わりに使用しないでくださいcompare(new->name,head->name)

于 2012-09-10T12:04:42.860 に答える
1

関数compareは2つのポインターを受け取りますが、2つのポインター(名前)personを渡しています。char

于 2012-09-10T12:04:17.057 に答える