在C中将struct传递给函数时出错

时间:2018-08-24 03:30:40

标签: c gcc struct parameter-passing

将结构传递给函数时,出现错误:预期为“结构书”,但参数为“结构书”类型。为什么会这样?

#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);

这里的错误在哪里?

2 个答案:

答案 0 :(得分:5)

您的两个不同的结构定义定义了两个不同的类型。即使它们都被称为import pandas as pd data = pd.read_clipboard() ,它们也不是同一类型。

您的变量struct bookbook1具有局部结构的类型,但是该函数期望的结构与全局结构的类型相同,因此会出现错误。

您可以通过删除本地结构定义来解决此问题;那么book2将具有全局结构的类型,等等。

答案 1 :(得分:2)

隐藏相同名称的全局变量的局部变量或参数。这可能会造成混淆。 main()内部的“结构书”隐藏了“结构书”的全局定义。 变量book1和book2是本地引用到main()的“结构书”的类型。 showBooks()使用参数作为book1或book2作为形式参数。 实际参数使用“结构手册”的全局定义,这导致类型不兼容。 注释本地定义并找到差异。