首页 > 解决方案 > C 程序错误:getname 的类型冲突

问题描述

我被困在这段代码中,因为它不断产生错误。我从我的学校笔记中复制了它,所以它应该没有错。但它无法执行。

这是我的代码:

这是我的代码。

这是错误消息: 这是错误消息。

标签: c

解决方案


编译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 文件),因为它们根本不包含函数体,仅包含声明。


推荐阅读