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