DisplayObjectContainer

DisplayObjectContainer

This question already has answers here:
Resolve build errors due to circular dependency amongst classes
                                
                                    (11个答案)
                                
                        
                                3年前关闭。
            
                    
我是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:
};


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

最佳答案

有两种方法可以解决您的问题,最简单的方法是将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




一种更困难的方法是更改​​设计,以使DisplayObject实际上不需要知道将其存储在哪个容器中。从长远来看,这种解耦可能会更好,但是如前所述,需要重新设计项目。

关于c++ - C++循环依赖项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36854667/

10-15 13:23