编译错误说“'check'的冲突类型”

时间:2016-07-15 06:47:42

标签: c pointers data-structures

 /**
 * Return an array of arrays of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */

      struct node{
      char data[3];
      struct node* next;
      };
      int** threeSum(int* nums, int numsSize, int* returnSize) {
            int i,j,k;
            struct node* head=NULL;
            struct node* current=NULL;
            struct node* temp=NULL;
            for(i=0;i<numsSize-2;i++){
                for(j=i+1;j<numsSize-1;j++){
                    for(k=j+1;k<numsSize;k++){
                       if((nums[i]+nums[j]+nums[k])==0){
                           **bool ans=check(&nums[i],&nums[j],&nums[k],head);**
                           if(ans==false){
                               temp=(struct node*)malloc(sizeof(struct node));
                               temp->data[0]=nums[i];
                               temp->data[1]=nums[j];
                               temp->data[2]=nums[k];
                               temp->next=NULL;
                               if(head==NULL){
                                  head=temp;
                                  current=head;
                        }
                        else{
                            current->next=temp;
                            current=temp;
                        }
                   }
                   else if(ans==true){
                       continue;
                   }
               }
            }
        }
    }
    return head;
}

     **bool check(int a,int b,int c,struct node* head){**
         while(head!=NULL){
              if(head->next[0]==a && head->next[1]==b && head->next[2]==c){
                 return false;
              }
              else{
                 return true;
              }
              head=head->next;
       }
}

~~~~我觉得我在这里缺少一些参考参数~~~~ 亲切的帮助.... 提前谢谢你:)

2 个答案:

答案 0 :(得分:1)

根据check()的定义,您只需要传递值而不是check()的指针。在行

bool ans=check(&nums[i],&nums[j],&nums[k],head);
//-------------^

删除&和其他人的nums[i]

答案 1 :(得分:0)

鉴于check的原型为:

bool check(int a,int b,int c,struct node* head)

电话

bool ans=check(&nums[i],&nums[j],&nums[k],head);

错了。它应该是(放弃& s):

bool ans=check(nums[i], nums[j], nums[k],head);

另外,在您从check调用之前提供threeSum声明。

bool check(int a,int b,int c,struct node* head);

int** threeSum(int* nums, int numsSize, int* returnSize) {
  ...
}

否则,编译器将对输入类型和check的返回类型进行假设。