我在编译多部分项目时遇到问题。我以为我已经包含了正确的#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)已预定。
#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同时包含fish.h和bay.h,但是当我不包括fish.h时,“bay”( fish 的网格)是不确定的。我想这个问题不太难,但是我似乎找不到解决方案。

- 提前致谢,
SegFaults McGee

最佳答案

不要在driver2.cpp中包含.cpp文件。改为包括fish.hbay.h

10-02 02:13
查看更多