【问题标题】:C typedef struct redefinition, different basic typesC typedef struct 重定义,不同的基本类型
【发布时间】:2011-05-01 01:48:29
【问题描述】:

第一次在这里发帖。我在从单独的文件中引用 typedef 结构时遇到问题。示例:

main.c //菜单和变量声明

#include <stdio.h>
#include <string.h>
#include "person.h"
#include "person.c"

person persondata[50] ;

person.h //typedef struct{...}person;

typedef struct
{
    char name[50];
}person;

person.c //函数

extern persondata[];

void copy()
{
    strcpy(persondata[0].name, "John");
}

我不断收到错误:“.name”的左边必须有结构/联合类型和重新定义,不同的基本类型

我应该如何修正这个引用?

【问题讨论】:

  • 这就是全部代码吗?您是否在您的 person.c 文件中#include "person.h"

标签: struct reference typedef


【解决方案1】:

通常你会 #include "person.h" 以使 person 的声明可见,然后你将 persondata 声明更改为:

extern person persondata[];

...即指定其类型。

【讨论】:

  • 你不需要使用'struct'
  • 谢谢,我自己也注意到了。相应地进行了编辑。
【解决方案2】:

extern person persondata[];

相反。 这应该可以解决问题。

如果你没有给它正确的类型,编译器就不会知道 persondata 是一个人数组。

【讨论】:

    【解决方案3】:

    extern persondata[]; 隐式等效于extern int persondata[];(如果您不指定类型,编译器假定int)。你需要extern person persondata[];

    另外,编译器需要能够在 person.c 中看到person 的定义,所以在文件顶部添加#include "person.h"

    【讨论】:

    • person.h 没有persondata 的声明,因此应更正而不是删除 extern 行(或者应将声明添加到 person.h)。
    【解决方案4】:

    你需要:

    #include "person.h"
    person persondata[10];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-25
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      相关资源
      最近更新 更多