2011-05-01 70 views
0

第一次在这里发布。我有从单独的文件中引用typedef结构的问题。例如:C typedef结构重定义,不同的基本类型

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

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

person persondata[50] ; 

person.h // typedef结构{...}人;

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

person.c //功能

extern persondata[]; 

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

我不断收到错误:左 “名称” 必须具备的struct/union类型和重新定义,不同的基本类型

我该如何解决这个问题?

+0

这是所有的代码?你是否在你的person.c文件中包含“person.h” – nos 2011-05-01 01:51:33

回答

1

extern person persondata[]; 

代替。 这应该会诀窍。

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

1

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

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

+0

person.h没有'persondata'的声明,所以extern行应该被纠正而不是被删除(或者声明应该被添加到person中。 H)。 – davmac 2011-05-01 01:53:40

+0

@davmac:的确,我已经解决了我的问题... – 2011-05-01 01:55:47

+0

然后你从我这里得到一个赞成票。 – davmac 2011-05-01 01:57:36

2

通常你会#include "person.h",以使person可见的声明,那么你会在persondata声明更改为:

extern person persondata[]; 

...即指定其类型。

+0

你不需要使用'结构' – 2011-05-01 01:53:18

+0

谢谢,只是注意到我自己。据此编辑。 – davmac 2011-05-01 01:55:13

0

您需要:

#include "person.h" 
person persondata[10]; 
相关问题