보통 헤더파일에 함수를 선언만하고 정의는 따로 cpp에서 한다. 그렇게 하지 않으면 링커 단계에서 오류가 뜰 수 있다. 예를들어 다음과 같은 상황을 보자A.h 라는 헤더파일에 void FuncA() { ... } 처럼 함수 정의가 들어있다.B.cpp, C.cpp 모두 A.h 를 include한다. 그리고 디버깅을 해보자. B.obj파일이나 C.obj파일에 이미 함수A가 정의되어 있다고하는 오류가 뜰 것이다. 분명 나는 정의를 한 헤더파일에 한번만 했는데 왜 오류가 뜰까 원리를 생각해보면, 다음과같다. 컴파일러는 B.cpp 를 처리하면서 A.h의 FuncA 정의를 보고 B.obj 에 FuncA의 기계어 코드(정의)를 생성한다. 이와같이 C.cpp를 처리하면서 C.obj에 FuncA의 기계어 코드(정의)를 ..