c++ 循环依赖/不完整类型

在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尚未在Stuffcollection.h中声明(第4行)
以上).我理解这是由于循环依赖.
>现在,如果我将#include“Spritesheet.h”更改为Forward
声明类Spritesheet;在Stuffcollection.h中,我得到了
编译器错误无效使用不完整类型’struct Spritesheet’
在Stuffcollection.cpp中(上面的第2行).
>同样,如果我将#include“Stuffcollection.h”改为class
Stuffcollection;在Spritesheet.h中,我得到了编译器错误聚合
‘Stuffcollection stuffme’类型不完整,无法定义
在Spritesheet.cpp中(上面的第2行).

我该怎么做才能解决这个问题?

您应该在Stuffcollection.cpp中包含Spritesheet.h
只需在头文件中使用forward声明而不是cpp文件,这解决了头文件的循环依赖性.源文件实际上没有循环依赖.

Stuffcollection.cpp需要知道类Spritesheet的完整布局(因为你取消引用它),所以你需要包含在该文件中定义类Spritesheet的头.

从您之前的Q here开始,我相信类Stuffcollection用于Spritesheet头文件的类声明中,因此也就是上面提出的解决方案.

https://stackoverflow.com/questions/7666665/circular-dependencies-incomplete-types

转载注明原文:c++ 循环依赖/不完整类型