包括文件混乱

时间:2010-08-10 13:10:46

标签: c++ class header header-files

我有两个类 - 一个持有实体信息,其他持有组件信息。 现在的问题是Entity类需要已经定义的Component类才能在子元素的向量中使用它,但同时Component需要Entity将它声明为它的父元素(我保持所有链接在它们之间)。这会产生奇怪的错误,即使IntelliSense说它已经定义了。

我如何克服这个困难?

4 个答案:

答案 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定义。