2011-04-26 2 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를 포함하지 않으면 "bay"(물고기 그리드)가 정의되지 않습니다. 문제가 너무 어렵지는 않겠지 만 해결책을 찾을 수없는 것 같습니다. 사전에

--Thanks, 세그먼테이션 폴트 (segfault) 맥기

+2

모든 헤더는 고유 한 #ifndef 이름으로 묶어야합니다. –

+0

그들은 있습니다! 방금 단순함을 위해 foo를 사용했습니다 ... –

답변

4

driver2.cpp의 .CPP 파일을 포함하지 마십시오. 대신 fish.hbay.h을 포함하십시오.

+0

+1. 일반적으로 같은 줄에'#include '와'.cpp'를 쓰는 사람이라면 아마 잘못했을 것입니다. –

+0

조언을 주신 하하 하하. 이것은 3 개 이상의 파일로 무언가를 컴파일하고 처음으로 보여줍니다! –