C++ 循环依赖

C++ Circular Dependencies

我对 C++ 比较陌生,我正在尝试编写一个简单的 2D 引擎。但是,当前结构存在问题,而在其他语言(AS3 等)中是可以的。我有两个 类,一个叫 DisplayObject,另一个叫 DisplayObjectContainer。 DisplayObjectContainer 是 DisplayObject 的子类,但 DisplayObject 有一个指向 DisplayObjectContainer 父类的指针 属性。我想不出一种方法来将彼此正确地包含在他们的文件中。我无法在 DisplayObject 中转发声明 DisplayObjectContainer,因为我需要在 DisplayObject 中访问 DisplayObjectContainer 的方法。

显示对象:

class DisplayObject
{
    public:

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

显示对象容器:

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

    protected:

    private:
};

如有任何帮助,我们将不胜感激。谢谢!

有几种方法可以解决您的问题,最简单的方法是将 DisplayObject 拆分为单独的 class 和 class 实现。因此,您在头文件中定义了 class,并在单独的源文件中实现了成员函数。

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

头文件中有这样的东西

#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 实际上不需要知道它存储在哪个容器中。这种解耦可能在长期 运行 中更好,但如前所述,需要重新设计您的项目。