将结构传递给函数时,出现错误:预期为“结构书”,但参数为“结构书”类型。为什么会这样?
#include <stdio.h>
#include <string.h>
struct book
{
int id;
char title[50];
};
int showBooks(struct book x);
int main()
{
struct book
{
int id;
char title[50];
};
struct book book1,book2;
book1.id = 2;
book2.id = 3;
strcpy(book1.title, "c programming");
strcpy(book2.title, "libc refrence");
printf("Book\t\tID\n");
showBooks(book1);
showBooks(book2);
}
int showBooks(struct book x)
{
printf("%s\t%d\n", x.title, x.id);
}
错误:
30:12:错误:“ showBooks”的参数1的类型不兼容
showBooks(book1);10:5:注意:预期为“结构书”,但参数的类型为“结构” book’int showBooks(struct book x);
31:12:错误:“ showBooks”参数1的类型不兼容
showBooks(book2);10:5:注意:预期为“结构书”,但参数的类型为“结构” book’int showBooks(struct book x);
这里的错误在哪里?
答案 0 :(得分:5)
您的两个不同的结构定义定义了两个不同的类型。即使它们都被称为import pandas as pd
data = pd.read_clipboard()
,它们也不是同一类型。
您的变量struct book
和book1
具有局部结构的类型,但是该函数期望的结构与全局结构的类型相同,因此会出现错误。
您可以通过删除本地结构定义来解决此问题;那么book2
将具有全局结构的类型,等等。
答案 1 :(得分:2)
隐藏相同名称的全局变量的局部变量或参数。这可能会造成混淆。 main()内部的“结构书”隐藏了“结构书”的全局定义。 变量book1和book2是本地引用到main()的“结构书”的类型。 showBooks()使用参数作为book1或book2作为形式参数。 实际参数使用“结构手册”的全局定义,这导致类型不兼容。 注释本地定义并找到差异。