2011-05-01 113 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]; 
相關問題