Круговые зависимости / неполные типы
В C ++ у меня проблема с циклическими зависимостями / неполными типами. Ситуация выглядит следующим образом:
Stuffcollection.h
#include "Spritesheet.h";
class Stuffcollection {
public:
void myfunc (Spritesheet *spritesheet);
void myfuncTwo ();
};
Stuffcollection.cpp
void Stuffcollection::myfunc(Spritesheet *spritesheet) {
unsigned int myvar = 5 * spritesheet->spritevar;
}
void myfunc2() {
//
}
Spritesheet.h
#include "Stuffcollection.h"
class Spritesheet {
public:
void init();
};
Spritesheet.cpp
void Spritesheet::init() {
Stuffcollection stuffme;
myvar = stuffme.myfuncTwo();
}
Если я сохраню включения, как показано выше, я получу ошибку компилятораspritesheet has not been declared
в Stuffcollection.h (строка 4 выше). Я понимаю, что это связано с круговой зависимостью.Теперь, если я изменюсь#include "Spritesheet.h"
к предварительной декларацииclass Spritesheet;
в Stuffcollection.h я получаю ошибку компилятораinvalid use of incomplete type 'struct Spritesheet'
в Stuffcollection.cpp (строка 2 выше).Точно так же, если я изменю#include "Stuffcollection.h"
вclass Stuffcollection;
в Spritesheet.h я получаю ошибку компилятораaggregate 'Stuffcollection stuffme' has incomplete type and cannot be defined
в Spritesheet.cpp (строка 2 выше).Что я могу сделать, чтобы решить эту проблему?