When you compile Mesh.cpp, it includes Mesh.h, which includes MeshList.h, which starts to include Mesh.h but stops early because _MESH_H is now defined. Then (back in MeshList.h) there’s a reference to Mesh — but that hasn’t been declared yet. Hence, e.g., your C2143 error.