c - C 程序错误:getname 的类型冲突
问题描述
我被困在这段代码中,因为它不断产生错误。我从我的学校笔记中复制了它,所以它应该没有错。但它无法执行。
这是我的代码:
这是错误消息:
解决方案
编译main()
时,编译器看不到您的getname()
函数,这是稍后定义的。编译器假定,该函数没有任何参数并且有返回类型int
。但是,当编译器最终到达getname()
函数时,它会意识到实际的返回值类型getname()
是不同的(在您的情况下struct nameTag
)。
该解决方案可以通过 2 个选项来完成:
一个)。将getname()
函数体放在上面main()
(第一次引用它的地方)。在这种情况下,当编译器到达时main()
,它已经知道getname()
函数正确的参数和返回类型。
struct nameTag { char fname[20]; char Iname[20]; };
struct nameTag getname() // Defined before first use
{
// Body of getname() function
}
main()
{
// body of your main() function
}
乙)。 在第一次引用它之前声明你的getname()
函数,告诉编译器它以某种方式存在于某个地方:main()
struct nameTag { char fname[20]; char Iname[20]; };
struct nameTag getname(); // Function declaration, pay attention to ';' at end and no body
main()
{
// body of your main() function
}
struct nameTag getname()
{
// Body of getname() function
}
后注:就我而言,对于本地模块函数,选项 A 是首选,但在某些情况下,如果需要选项 B(例如,在两个或多个函数之间相互引用的情况下)。选项 B 也用于头文件(.h 文件),因为它们根本不包含函数体,仅包含声明。
推荐阅读
- java - android保存文件/创建文件夹到sd卡
- c# - C# 安全风险
- sql - 完整课程的名称是什么
- javascript - 使用javascript选中和取消选中动态创建的复选框时如何切换动态创建的文本框
- javascript - 以自定义方式对数组进行排序?
- javascript - Reactstrap 工具提示被放置在整个 div 的底部,而不是它的子元素
- mysql - 如何通过 Node Js 模块文件运行 MySQL 查询
- c# - 为什么不能区域测试点的范围?
- javascript - 如何在 React with Typescript 中传递具有所需道具的组件数组?
- python - 如何使用 for 循环打印乘法表?