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:
DisplayObjectContainer:
任何帮助,将不胜感激。谢谢!
并且在源文件中包括头文件:
一种更困难的方法是更改设计,以使
(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