티스토리 뷰

 
C++로 새로 코드를 작성하고 수정하고 하다보면 별의별 보지 못했던 에러를 많이 볼 수 있습니다. 오늘 같은 날이 그런 날입니다. 2시간 전에 잘 돌아가던 코드에 단지 함수 1~2개를 추가하고 전방 선언이 불가능한 친구들을 위해 헤더에 불가피하게 include를 해주고 새 코드가 잘 돌아가는지 확인하려고 하던 찰나 못보던 에러들이 발생했습니다.
 
경험적으로 방금 작성된 코드가 잘못되었음을 알려주는 시덥잖은 나머지 에러를 제거하고 남은 에러는 다음이었습니다:

C7568 : 가정한 함수 템플릿 'className' 뒤에 인수 목록이 없습니다.

 
 
 

해결


일반적으로 자주 보는 컴파일러 에러의 경우, 컴파일러가 알려주는 문제를 해결하면 컴파일을 성공할 수 있습니다. 하지만, 보지도 못하던 낯선 에러들이 다양하게 등장하면 해당 문제가 아닐 확률이 경험상 높습니다.
 
우선 에러 내용대로 코드를 잘못 작성했는지 확인합니다. 그것이 문제였다면 페이지를 닫으셔도 좋습니다. 아닌 경우, 다른 에러를 찾아봐야 합니다.
 
제 경우 순환 include가 문제였습니다. 순환 인클루드란 A 헤더가 B헤더를 인클루드하고 B헤더가 A헤더를 인클루드하는 것을 말합니다. A헤더에 타입 정의가, B헤더에 인터페이스가 기술되어 있었는데 서로의 헤더 파일에서 각자의 클래스들이 자신을 정의하는데 순환이 되다보니 발생한 문제였습니다.
 
이를 해결하기 위해 헤더 파일을 세분화하여 순환 include가 발생하지 않도록 제어하였습니다. 이런 문제로 1 ~ 2시간 뺏기다 보면, 자동으로 인클루드 처리해주는 최신 프로그래밍 언어들이 부러울 때가 있습니다.
 
 
 

레퍼런스


stackvoerflow - How to pass a template class as a function argument without C7568 error
댓글