Ну, у вас есть циклическое включение двух заголовочных файлов: vec3.h
и quaternion.h
.Включите охранников, чтобы убедиться, что каждый заголовок включен только один раз.Один из них будет включен первым, другой - вторым.В вашем случае quaternion.h
включается первым, что означает, что Vec3
становится неполным типом в нем.Это то, что говорит вам компилятор.
Поскольку вы пытаетесь использовать объект Vec3
в качестве непосредственного члена объекта Quaternion
, вам абсолютно необходимо, чтобы Vec3
был полным типом.Заголовок quaternion.h
должен включать заголовок vec3.h
.Декларация
class Vec3;
абсолютно ничего не достигает в quaternion.h
, так что вы можете просто удалить ее.
С учетом вышеизложенного следует, что vec3.h
не может quaternion.h
, или вы получите круговое включение, которое никогда ничего не достигнет.Снимите включение quaternion.h
с vec3.h
.Сохраните объявление
class Quaternion;
в vec3.h
и посмотрите, работает ли оно таким образом.