我正在尝试编译以下代码,并且在 回线 错误说, 返回类型'日期时的不兼容类型。 有人可以解释一下原因吗?
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;
}
答案 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);