2011-09-23 53 views
0

相同的代碼在TURBO C.使用GCC結構和得到錯誤

struct details 
    { 
     char name[20]; 
     int year; 
     float price; 
    }my_str; 

    details book1[10]; 

此錯誤產生跑去。這怎麼解決?

ram.c: In function ‘main’: 
ram.c:11:1: error: ‘details’ undeclared (first use in this function) 
ram.c:11:1: note: each undeclared identifier is reported only once for each function it appears in 
+0

的原因喲你得到的錯誤是,在C++中它允許像上面那樣寫,但在C中不是。我的猜測是,Borland將它作爲Turbo C的延伸,因爲它們正朝着C++方向發展。 –

回答

2

有兩種方法來解決這個問題:

變化下聯是:

struct details book1[10]; 

或者你可以改變聲明:

typedef struct{ 
    char name[20]; 
    int year; 
    float price; 
} details; 

C是略與C++不同,所以你不能以相同的方式聲明結構。

1

你需要使結構變量的聲明是這樣的:

struct details book1[10]; 

這是因爲detailstypedef版,因此你cannt使用它像一個用戶定義的類型,因此,你需要使用struct關鍵字。

需要注意的是,在上述定義my_str是一個變量(分配的對象)類型struct details

,你也可以這樣做:

typedef struct details 
{ 
    char name[20]; 
    int year; 
    float price; 
} my_str; 

然後執行:

my_str book1[10]; 

這與上面相同。請注意,my_str不是變量(對象),而是您用typedef關鍵字定義的類型名稱。在此之後,編譯器會知道你正在使用的my_str爲您所創建的複合結構數據類型的新的用戶定義類型名,因此,你可以使用my_str,而不是直接使用struct details

2
details book1[10]; 

需求是...

struct details book1[10]; 
0

這是比較正確的AA位在C爲:

typedef struct _detailstype 
{ 
    char name[20]; 
    int year; 
    float price; 
} details; 


details book1[10];