Compilation: g++ -c point.cpp g++ -c tripple.cpp g++ point.o tripple.o main.cpp I have added 'Include Guards' in the two header files. point.h includes tripple.h tripple.h includes point.h class Point is forward declared in tripple.h class Tripple is forward declared in point.h A cpp file includes its header file - should always happen. Thus: point.cpp includes point.h tripple.cpp includes tripple.h main.cpp includes both point.h and tripple.h This is a nice and symmetric solution - as I see it.