2011-04-26 85 views
0

我在編譯多部分項目時遇到問題。我以爲我已經正確包含了正確的#ifndef/#define聲明幷包含頭文件,但顯然不是。當試圖編譯這個錯誤想出了:簡單的編譯問題

[23:18]andrew final_project$:g++ driver2.cpp fish.cpp bay.cpp 
ld: duplicate symbol Fish::Fish() in /var/folders/cc/cc+as-5yHSqg0Jcr+X2+uk+++TI/-Tmp-//ccqNXrPE.o 
and /var/folders/cc/cc+as-5yHSqg0Jcr+X2+uk+++TI/-Tmp-//cc5dOIm5.o for 
architecture x86_64 
collect2: ld returned 1 exit status 

如果必要的話,我可以有更多的信息,但我的兩個頭文件(fish.hbay.h)與bookended。

#ifndef FOO 
#define FOO 
... 
#endif 

我的兩個執行文件fish.cppbay.cpp

fish.cpp:#include "fish.h"

bay.cpp:#include "bay.h" #include "fish.h"

我的驅動程序driver2.cpp:#include "fish.cpp" #include "bay.cpp"

我認爲問題在於這樣一個事實:bay.cpp包括魚。 h和bay.h,但是當我不包括fish.h時,「海灣」(魚網格)是不確定的。我想這個問題並不難,但我似乎無法找到解決方案。

--Thanks提前, 段錯誤麥基

+2

每個標題都應該包含唯一的#ifndef名稱。 – 2011-04-26 04:46:32

+0

他們是!爲了簡單起見,我只是用了foo ... – 2011-04-26 04:54:52

回答

4

不要在driver2.cpp的.cpp文件。改爲包括fish.hbay.h

+0

+1。一般來說,如果你在同一行寫'#inc'和'.cpp',你可能做錯了。 – 2011-04-26 04:50:48

+0

哈哈感謝您的意見。這是我第一次編譯超過三個文件的東西,它顯示! – 2011-04-26 04:55:58