In C++, I have a problem with circular dependencies / incomplete types. The situation is as follows:
Stuffcollection.h
#include \"Spritesheet.h\";
cl
You should include Spritesheet.h
in Stuffcollection.cpp
Just use forward declaration in the header file not the cpp file, that solves the circular dependency of the header file. The source file has no circular dependency actually.
Stuffcollection.cpp
needs to know the complete layout of class Spritesheet
(because you dereference it), So you need to include the header which defines the class Spritesheet
in that file.
From your previous Q here, I believe that class Stuffcollection
is used in the class declaration of Spritesheet
header file and hence the above proposed solution.
Spritesheet.h
doesn't need to include Stuffcollection.h
, since no Stuffcollection
is used in the class declaration of Spritesheet
. Move that include line to Spritesheet.cpp
instead and you should be fine.
Use this form for your nested includes:
#ifndef STUFFCOLLECTION_H_GUARD
#define STUFFCOLLECTION_H_GUARD
class Spritesheet;
class Stuffcollection {
public:
void myfunc (Spritesheet *spritesheet);
void myfuncTwo ();
};
#endif
#include "Stuffcollection.h"
#include "Spritesheet.h"
void Stuffcollection::myfunc(Spritesheet *spritesheet) {
unsigned int myvar = 5 * spritesheet->spritevar;
}
void Stuffcollection::myfuncTwo() {
//
}
#ifndef SPRITESHEET_H_GUARD
#define SPRITESHEET_H_GUARD
class Spritesheet {
public:
void init();
};
#endif
#include "Stuffcollection.h"
#include "Spritesheet.h"
void Spritesheet::init() {
Stuffcollection stuffme;
myvar = stuffme.myfuncTwo();
}
General rules I follow:
pragma