C++循环包括

Nik*_*a C 5 c++ compiler-errors header circular-dependency

我无法解决这个循环依赖问题; 总是得到这个错误:"无效使用不完整类型结构GemsGame"我不知道为什么编译器不知道GemsGame的声明,即使我包含gemsgame.h两个类都相互依赖(GemsGame存储GemElements的向量) ,和GemElements需要访问这个相同的向量)

这是GEMELEMENT.H的部分代码:

#ifndef GEMELEMENT_H_INCLUDED
#define GEMELEMENT_H_INCLUDED

#include "GemsGame.h"

class GemsGame;

class GemElement {
    private:
        GemsGame* _gemsGame;

    public:
        GemElement{
            _gemsGame = application.getCurrentGame();
            _gemsGame->getGemsVector();
        }
};


#endif // GEMELEMENT_H_INCLUDED
Run Code Online (Sandbox Code Playgroud)

......和GEMSGAME.H:

#ifndef GEMSGAME_H_INCLUDED
#define GEMSGAME_H_INCLUDED

#include "GemElement.h"

class GemsGame {
    private:
        vector< vector<GemElement*> > _gemsVector;

    public:
        GemsGame() {
            ...
        }

        vector< vector<GemElement*> > getGemsVector() {
            return _gemsVector;
        }
}

#endif // GEMSGAME_H_INCLUDED
Run Code Online (Sandbox Code Playgroud)

DUm*_*man 5

删除#include指令,您已经向前声明了类。

如果您的类 A 在其定义中需要了解类 B 的详细信息,那么您需要包含类 B 的标头。如果类 A 只需要知道类 B 存在,比如当类 A 只保存一个指向类 B 实例的指针时,那么前向声明就足够了,在这种情况下就#include不需要 an 了。


Luk*_* B. 3

如果您尊重指针并且函数是内联的,您将需要完整类型。如果您为实现创建一个 cpp 文件,则可以避免循环依赖(因为两个类都不需要在标头中包含彼此的 .h)

像这样的东西:

你的标题:

#ifndef GEMELEMENT_H_INCLUDED
#define GEMELEMENT_H_INCLUDED

class GemsGame;

class GemElement {
    private:
        GemsGame* _gemsGame;

    public:
        GemElement();
};


#endif // GEMELEMENT_H_INCLUDED
Run Code Online (Sandbox Code Playgroud)

你的cpp:

#include "GenGame.h"
GenElement::GenElement()
{
   _gemsGame = application.getCurrentGame();
   _gemsGame->getGemsVector();
}
Run Code Online (Sandbox Code Playgroud)