簡體   English   中英

將struct傳遞給c中的函數時出錯

[英]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 ,它們也不是同一類型。

你的變量book1book2有一個本地結構的類型,但是函數需要一個全局結構類型的結構,因此錯誤。

您可以通過刪除本地結構定義來解決問題; 那么book1將具有全局結構的類型等。

隱藏同名全局變量的局部變量或參數。 這可能令人困惑。 main()中的“struct book”隱藏了“struct book”的全局定義。 變量book1和book2是“struct book”的類型,本地引用main()。 showBooks()使用參數作為book1或book2作為形式參數。 實際參數使用“結構書”的全局定義,這導致不兼容的類型。 評論本地定義並找出差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM