错误显示为“返回结构类型时的类型不兼容...”

时间:2019-01-14 22:31:35

标签: c

我正在尝试编译以下代码,并且在 回线 错误说, 返回类型'日期时的不兼容类型。 有人可以解释一下原因吗?

typedef struct Date Date;

struct Date{

int jour;
int mois;
int anner;

};

Date plus1(Date *p){


if((p->jour==30)&&(p->mois==12)){

    p->jour=1;
    p->mois=1;
    p->anner++;
 }
 else if(p->jour==30){

        p->jour=1;
        p->mois++;
  }
 else{

 p->jour++;
 }

  return p;

 }

1 个答案:

答案 0 :(得分:0)

要清楚,指针与返回类型的类型不同。

在功能签名中,指定

Date plus1(Date *p)

哪个很好,但请注意p的类型不是日期。 P的类型是指向日期结构的指针。

您的全部功能是

Date plus1(Date *p) {
... // Do stuff
return p;
}

简单的答案是p是日期所在的地址。地址与结构不同,因此类型不兼容。有两个不错的选择:更改返回类型或取消对p的引用。

第一个选项会将签名更改为

Date *plus1(Date*p) 

这很好,但是请注意,您将获得一个指针。如果您坚持类型必须为返回的日期,则另一个选择是更改return语句。

Date plus1(Date *p) {
... // Do stuff
return *p;
}

这将返回对象本身。

但是,这只是猜测,但是如果您想物理地更改p本身,则无需返回类型,它会自己完成。

void plus1(Date *p) 

然后,在调用函数时,您无需担心返回。您可以调用它并传递地址:

plus1(&foo);