2013-12-07 53 views
0

我對C編程非常陌生,所以我很抱歉如果這看起來太簡陋了。 這裏是我的問題的縮小版,基本上,我想叫R_A的EXTERN陣列中的結構元素存儲在索引0添加到struct的extern數組。 (C編程語言)

頭文件:

struct rescue_asset { 
     char callsign[31]; 
     char type; 
    }; 

    extern struct rescue_asset r_a[51]; 

主要文件:

#include "header_file.h" 

    int main(int argc, char** argv) { 
     strcpy(r_a[0].callsign, "ID"); 
    } 

爲什麼這不起作用,有什麼解決辦法?

+0

是什麼讓你覺得這不起作用?任何編譯/運行時錯誤? – elyashiv

+0

當我嘗試運行它時,我得到BUILD FAILED,如果我把程序運行出來,那爲什麼我不能在頭文件中定義它? – user2069328

+0

它在源單元的某處定義,而不是標題。 – BLUEPIXY

回答

0

的extern聲明數組,但沒有定義它。它定義在頭文件和主文件中使用它

//Header file 
struct rescue_asset { 
char callsign[31]; 
char type; 
}r_a[51]; 

//Main file 
#include<header.h> 
extern struct rescue_asset r_a[51]; 
int main(int argc, char** argv) { 
strcpy(r_a[0].callsign, "ID"); 
return 0; 
} 
+0

我有那個導入,我的錯誤沒有提到它 – user2069328

+0

我試過這個,並得到了錯誤:rescue_assets.h:27:20:錯誤:預計'=',',',';','asm'或'__attribute__ '之前'r_a' – user2069328

+0

我打錯了結構實例,修好了它 – hrv

1

你錯過了;從結構塊的末尾開始。

糾正:

struct Foo { 
    int j; 
}; 
+0

對不起,這只是一個錯字 – user2069328

+1

這不是真正的問題。 – this

1

的extern只是聲明數組,你必須把

struct rescue_asset r_a[51]; 

例如在主源文件中預留內存空間陣列

0
struct rescue_asset r_a[51]; 

你應該在某個地方定義這個變量,也許你可以在main.cpp中定義。 因爲在頭文件中你已經定義變量爲extern。

+0

我以爲extern意味着它本質上是全球性的?我將如何定義它?我以爲我在頭文件中做到了這一點? – user2069328

+0

extern關鍵字只是通知編譯器該變量的內存已被分配,所以不要分配另一個。 如果您在使用多個源文件的情況下使用相同的全局變量,那麼在頭文件中,您應該將該變量聲明爲extern,以便在另一個文件中使用該變量時,編譯器不會創建多個內存副本。 – rajenpandit