我正在尝试编译下面的代码,我在返回行上得到了一个错误,错误说:“当返回类型的日期时,不兼容的类型。有人能解释一下原因吗?”
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;
}
发布于 2019-01-15 06:39:45
需要说明的是,指针与返回类型不是同一类型。
在函数签名中,您可以指定
Date plus1(Date *p)
这很好,但请注意p的类型不是日期。P的类型是指向日期结构的指针。
您的完整功能是
Date plus1(Date *p) {
... // Do stuff
return p;
}
简单的答案是p是日期所在的地址。地址与结构不同,因此类型不兼容。接下来有两个很好的选择:更改返回类型或取消引用p。
第一个选项将签名更改为
Date *plus1(Date*p)
这很好,但请注意,您将得到一个指针。如果您坚持类型必须是返回的日期,另一种选择是更改返回语句。
Date plus1(Date *p) {
... // Do stuff
return *p;
}
这将返回对象本身。
然而,这只是一种猜测,但是如果你想物理地改变p本身,你不需要返回类型,它将自己完成。
void plus1(Date *p)
这样在调用函数时,就不需要担心返回的问题了。你可以直接调用它并传递地址:
plus1(&foo);
https://stackoverflow.com/questions/54190164
复制相似问题