在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();
}
Stuffcollection.h中的
spritesheet has not been declared
(第4行)以上)。我了解这是由于循环依赖所致。
#include "Spritesheet.h"
更改为Forward在Stuffcollection.h中声明
class Spritesheet;
,我得到了编译器错误
invalid use of incomplete type 'struct Spritesheet'
在Stuffcollection.cpp中(上面的第2行)。 #include "Stuffcollection.h"
更改为classStuffcollection;
,则会收到编译器错误aggregate'Stuffcollection stuffme' has incomplete type and cannot be defined
在Spritesheet.cpp中(上述第2行)。 我该怎么做才能解决这个问题?
最佳答案
您应该在Spritesheet.h
中包括Stuffcollection.cpp
只需在头文件而不是cpp文件中使用前向声明即可解决头文件的循环依赖性。源文件实际上没有循环依赖项。Stuffcollection.cpp
需要知道Spritesheet
类的完整布局(因为您取消引用了它),因此您需要在该文件中包含用于定义Spritesheet
类的 header 。
根据您先前的Q here ,我相信Stuffcollection
头文件的类声明中使用了Spritesheet
类,因此提出了上述建议的解决方案。