我有两个类 - 一个持有实体信息,其他持有组件信息。 现在的问题是Entity类需要已经定义的Component类才能在子元素的向量中使用它,但同时Component需要Entity将它声明为它的父元素(我保持所有链接在它们之间)。这会产生奇怪的错误,即使IntelliSense说它已经定义了。
我如何克服这个困难?
答案 0 :(得分:6)
component.h:
class Entity;
class Component {
...
Entity *parent;
};
entity.h:
#include "component.h"
class Entity {
...
}
这里唯一的缺点是component.h中的内联方法不能使用实体方法。
答案 1 :(得分:3)
听起来你有这个:
Entity.h:
#include <vector>
class Entity {
public:
std::vector<Component> children;
};
Component.h:
#include <Entity.h>
class Component : public Entity { ... };
解决此问题的一种方法是转发声明Component
类并使用指向vector
s的Component
指针:
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.
答案 2 :(得分:2)
答案 3 :(得分:1)
一种选择是,如果您只使用Component
中的vector
指针(即vector<Component*>
(或智能ptr变体)而不是vector<Component>
),您可以转发声明Component
类,您的Entity
类声明不需要Component
定义。