首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误显示“返回结构的类型时类型不兼容...”

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

Stack Overflow用户
提问于 2019-01-15 06:31:35
回答 1查看 31关注 0票数 1

我正在尝试编译下面的代码,我在返回行上得到了一个错误,错误说:“当返回类型的日期时,不兼容的类型。有人能解释一下原因吗?”

代码语言:javascript
运行
复制
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;

 }
EN

回答 1

Stack Overflow用户

发布于 2019-01-15 06:39:45

需要说明的是,指针与返回类型不是同一类型。

在函数签名中,您可以指定

代码语言:javascript
运行
复制
Date plus1(Date *p)

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

您的完整功能是

代码语言:javascript
运行
复制
Date plus1(Date *p) {
... // Do stuff
return p;
}

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

第一个选项将签名更改为

代码语言:javascript
运行
复制
Date *plus1(Date*p) 

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

代码语言:javascript
运行
复制
Date plus1(Date *p) {
... // Do stuff
return *p;
}

这将返回对象本身。

然而,这只是一种猜测,但是如果你想物理地改变p本身,你不需要返回类型,它将自己完成。

代码语言:javascript
运行
复制
void plus1(Date *p) 

这样在调用函数时,就不需要担心返回的问题了。你可以直接调用它并传递地址:

代码语言:javascript
运行
复制
plus1(&foo);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54190164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档