JV asked in 電腦與網際網路程式設計 · 1 decade ago

問個multiple definition的問題

如題,

電腦compile一直出現multiple defintion of \'name_h\'

可是我在header檔

明明就寫成

#ifndef PEOPLE_H

#define PEOPLE_H

struct people

{

char name[10];

int hp,hp_max,mp,mp_max,

p_str,p_int,p_charm;

unsigned flag:4;

};

char *name_h[2]={\"aaa\",\"bbb\"};

#endif

為什麼他還一直出現這個error啊><?

3 Answers

Rating
  • Lv 7
    1 decade ago
    Favorite Answer

    在一般的C/C++編譯器裡(compiler),如果你有所謂的”multiple defintion of XXX”或”redefinition of XXX”. 編譯器(compiler)應會跟你講第一個和第二個XXX的宣告在哪.你若是用VC++或Dev-Cpp的話,那是”redefinition of XXX”.如是用BCC的話那應是”multiple defintion of XXX”.”multiple defintion of XXX”的整個錯誤訊息應是Error E2238 YYY y: Multiple declaration for XXXYYY是檔案名y是行數XXX是宣告多次的變數/函式名這個錯誤是告訴你第二個XXX的宣告在哪.在這錯誤訊息之後應還有一個錯誤訊息.Error E2344 ZZZ z: Earlier declaration of XXXZZZ是檔案名z是行數XXX是宣告多次的變數/函式名這個錯誤是告訴你第一個XXX的宣告在哪.所以你到ZZZ裡第z行和YYY裡第y行就會找到你的”Multiple declaration”了.例:在test.cpp裡:int hello[10];int hello[12];int main(){        return(0);}編譯時會有Error E2238 big.cpp 2: Multiple declaration for 'hello'Error E2344 big.cpp 1: Earlier declaration of 'hello'所以我宣告多次的變數叫hello.第一次宣告是在檔案big.cpp裡的第一行.第二次宣告是在檔案big.cpp裡的第二行.你若是用VC++或Dev-Cpp的話,他們也有相似的錯誤訊息告訴你多次宣告的地方.自己先找找看.若找不到,那先請你刊出錯誤的訊息,之後在刊出出錯的檔案.懂不懂?不懂請再問.

    Source(s): Myself
    • Login to reply the answers
  • none
    Lv 4
    1 decade ago

    1 在 .h 內,把 char *name_h[2]={"aaa","bbb"};

    改成

    extern char *name_h[2]; // 這是宣告,可以出現很多次

    2 把 char *name_h[2]={"aaa","bbb"}; // 這是定義,可以出現很多次

    放在某個 .c/.cpp 內

    2006-07-28 10:22:06 補充:

    啊,這邊要改一下 ^_^// 這是定義,只能出現一次

    • Login to reply the answers
  • 1 decade ago

    建議附上全部的程式碼,包括.c及.h。看起來應該是在.c及.h分別定義了'name_h',編譯器很少出錯!

    • Login to reply the answers
Still have questions? Get your answers by asking now.