You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决C语言中Pass函数报conflicting types类型冲突错误

C语言Pass函数类型冲突报错解决

报错含义

error: conflicting types for 'Pass' 表示函数的前置声明和实际定义的签名不匹配,C语言要求函数的返回值、参数数量、每个参数的类型在声明和定义时必须完全一致,否则就会触发该类型冲突错误。

问题根源

  • 你在代码开头的函数声明部分写的是:void Pass(Point now, int* arr);,第二个参数是一维int指针
  • 后续实际实现Pass函数时的签名是:void Pass(Point now, int arr[N][N]),第二个参数是二维int数组(传参时等价于int (*arr)[N],即指向长度为N的int数组的指针)
  • 两种参数类型不兼容,因此触发类型冲突。

修复方案

核心修复:统一函数声明和定义的签名

将声明行的

void Pass(Point now, int* arr);

修改为和定义一致的形式即可:

void Pass(Point now, int arr[N][N]);

也可以用等价的指针写法:

void Pass(Point now, int (*arr)[N]);

额外隐藏问题修复

你的代码还有两处会触发运行异常的问题需要同步修改:

  1. 边界检查顺序错误:你当前判断上下左右可通行时,先访问数组再判断索引是否合法,会导致数组越界访问,需要把边界判断放在数组访问之前,例如上方判断改为:
if(now.x - 1 >= 0 && 1 == arr[now.x-1][now.y])

其余三个方向的判断都按这个逻辑调整顺序。
2. Pop函数返回值不匹配:你声明的Pop函数返回类型是void,但代码中存在Point p = Pop(s);的调用,需要把Pop函数的声明和定义的返回值都改为Point类型。

内容的提问来源于stack exchange,提问作者Betty Gandhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:57:00