[英]Error when passing struct to function in c
當我將結構傳遞給函數時,我得到錯誤:期望'struct book'但是參數是'struct book'類型。 為什么會這樣?
#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:注意:預期的'struct book'但是參數類型為'struct book'int showBooks(struct book x);
31:12:錯誤:'showBooks'參數1的不兼容類型
showBooks(第二冊);10:5:注意:預期的'struct book'但是參數類型為'struct book'int showBooks(struct book x);
這里的錯誤在哪里?
兩個不同的結構定義定義了兩種不同的類型。 即使它們都被稱為struct book
,它們也不是同一類型。
你的變量book1
和book2
有一個本地結構的類型,但是函數需要一個全局結構類型的結構,因此錯誤。
您可以通過刪除本地結構定義來解決問題; 那么book1
將具有全局結構的類型等。
隱藏同名全局變量的局部變量或參數。 這可能令人困惑。 main()中的“struct book”隱藏了“struct book”的全局定義。 變量book1和book2是“struct book”的類型,本地引用main()。 showBooks()使用參數作為book1或book2作為形式參數。 實際參數使用“結構書”的全局定義,這導致不兼容的類型。 評論本地定義並找出差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.