如何解决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]);
额外隐藏问题修复
你的代码还有两处会触发运行异常的问题需要同步修改:
- 边界检查顺序错误:你当前判断上下左右可通行时,先访问数组再判断索引是否合法,会导致数组越界访问,需要把边界判断放在数组访问之前,例如上方判断改为:
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
相关产品推荐
相关产品推荐

