繁体   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