C ++循环依赖

时间:2016-04-26 03:19:10

标签: c++ include circular-dependency

我对C ++比较陌生,我正在尝试编写一个简单的2D引擎。但是,目前的结构存在问题,在其他语言(AS3等)中也没问题。我有两个类,一个叫做DisplayObject,另一个叫做DisplayObjectContainer。 DisplayObjectContainer是DisplayObject的子类,但DisplayObject具有指向DisplayObjectContainer父级作为属性的指针。我无法找到在文件中正确包含彼此的方法。我无法在DisplayObject中转发声明DisplayObjectContainer,因为我需要在DisplayObject中访问DisplayObjectContainer的方法。

的DisplayObject:

class DisplayObject
{
    public:

        DisplayObjectContainer *parent;
...
    ...this->parent->globalTransform...
...

的DisplayObjectContainer:

class DisplayObjectContainer : public DisplayObject
{
    public:
        DisplayObjectContainer();
        virtual ~DisplayObjectContainer();

    protected:

    private:
};

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决您的问题,最简单的方法就是将<div id="container"> <div id="block1"> <img src="https://placeholdit.imgix.net/~text?txtsize=19&txt=200%C3%97300&w=200&h=300"> </div> <div id="block2"> </div> </div>分成单独的类和类实现。因此,您可以在头文件中定义类,并在单独的源文件中实现成员函数。

这样DisplayObject的头文件就不需要DisplayObject的头文件了,所需要的只是DisplayObjectContainer类的前向声明。

头文件中的这类内容

DisplayObjectContainer

在源文件中包含头文件:

#pragma once

// Forward declaration of the class
class DisplayObjectContainer;

class DisplayObject
{
private:
    DisplayObjectContainer *parent;
    ...
};

更难的方法是更改​​设计,以便#include "DisplayObject.h" #include "DisplayObjectContainer.h" // Here you can use the members of DisplayObjectContainer 实际上不需要知道它存储在哪个容器中。从长远来看,这种脱钩可能更好,但是如上所述需要重新设计项目。