我对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:
};
任何帮助将不胜感激。谢谢!
答案 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
实际上不需要知道它存储在哪个容器中。从长远来看,这种脱钩可能更好,但是如上所述需要重新设计项目。