我在編譯多部分項目時遇到問題。我以爲我已經正確包含了正確的#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.h
和bay.h
)與bookended。
#ifndef FOO
#define FOO
...
#endif
我的兩個執行文件fish.cpp
和bay.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提前, 段錯誤麥基
每個標題都應該包含唯一的#ifndef名稱。 – 2011-04-26 04:46:32
他們是!爲了簡單起見,我只是用了foo ... – 2011-04-26 04:54:52