包含文件混乱

发布于 2024-09-14 05:02:20 字数 191 浏览 7 评论 0原文

我有 2 个类 - 一个类保存实体信息,另一个类保存组件信息。 现在的问题是,Entity 类需要已经定义的 Component 类,以便在子级向量中使用它,但同时 Component 需要 Entity 将其声明为它的父级(我保持其间的所有链接)。这会产生奇怪的错误,尽管 IntelliSense 说它已经全部定义好了。

我怎样才能克服这个困难呢?

I'm having 2 classes - one holding Entity information other holding Component information.
Now the problem is that the Entity class needs Component class already defined for using it in vector of children, but at the same time Component needs Entity to declare it as it's parent (I'm keeping everything linked in between). This puts out strange errors, even though IntelliSense says it's all already defined.

How can I overcome this difficulty?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

楠木可依 2024-09-21 05:02:20

component.h:

class Entity;
class Component {
    ...
    Entity *parent;
};

entity.h:

#include "component.h"
class Entity {
    ...
}

这里唯一的缺点是component.h中的内联方法不能使用Entity方法。

component.h:

class Entity;
class Component {
    ...
    Entity *parent;
};

entity.h:

#include "component.h"
class Entity {
    ...
}

The only drawback here is that inline methods in component.h cannot use Entity methods.

知你几分 2024-09-21 05:02:20

听起来您有这样的情况:

Entity.h:

#include <vector>

class Entity {
public:
    std::vector<Component> children;
};

Component.h:

#include <Entity.h>

class Component : public Entity { ... };

解决该问题的一种方法是前向声明 Component 类并使用指向 vector 的指针代码>组件s:

Entity.h:

#ifndef ENTITY_H
#define ENTITY_H
#include <vector>

class Component;    // Forward declaration.

class Entity {
public:
    std::vector<Component*> children;
};

#endif /* ndef ENTITY_H */

Component.h:

#ifndef COMPONENT_H
#define COMPONENT_H
#include <Entity.h>    // To allow inheritance.

class Component : public Entity { ... };

#endif /* ndef COMPONENT_H */

Entity.cpp:

#include <Entity.h>
#include <Component.h>    // To access Component members.

It sounds like you have this:

Entity.h:

#include <vector>

class Entity {
public:
    std::vector<Component> children;
};

Component.h:

#include <Entity.h>

class Component : public Entity { ... };

One way around the issue is to forward-declare the Component class and use a vector of pointers to Components:

Entity.h:

#ifndef ENTITY_H
#define ENTITY_H
#include <vector>

class Component;    // Forward declaration.

class Entity {
public:
    std::vector<Component*> children;
};

#endif /* ndef ENTITY_H */

Component.h:

#ifndef COMPONENT_H
#define COMPONENT_H
#include <Entity.h>    // To allow inheritance.

class Component : public Entity { ... };

#endif /* ndef COMPONENT_H */

Entity.cpp:

#include <Entity.h>
#include <Component.h>    // To access Component members.
意犹 2024-09-21 05:02:20

一种选择是,如果您仅在 vector 中使用指向 Component 的指针(即 vector (或智能 ptr 变体)) vector),您可以转发声明 Component 类,并且您的 Entity 类声明不需要 Component< /代码> 定义。

One option is if you just use pointers to Component in your vector (ie vector<Component*> (or a smart ptr variant) instead of vector<Component>), you could forward declare the Component class and your Entity class declaration wouldn't need the Component definition.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文