我有一个GameObject类,它具有Component和Transform的 vector 。
变换是一个组件,但可以单独访问。
尝试在GameObject中同时包含Component.h和Transform.h时,在Component上出现基类未定义错误。

错误信息:

    Error   1   error C2504: 'Component' : base class undefined c:\users\pyro\documents\visual studio 2010\projects\engine\main\transform.h 9

游戏对象
    #ifndef _GameObject
    #define _GameObject
    #include "Core.h"
    #include "Component.h"
    #include "Transform.h"

    class Transform;
    class Component;

    class GameObject
    {
        protected:
            Transform* transform;
            vector<Component*> components;
    };

    #endif

组件.h
    #ifndef _Component
    #define _Component

    #include "Core.h"
    #include "GameObject.h"

    class GameObject;

    class Component
    {
    protected:
        GameObject* container;
    };
    #endif

转换h
    #ifndef _Transform
    #define _Transform

    #include "Core.h"
    #include "Component.h"

    //Base class undefined happens here
    class Transform : public Component
    {
    };

    #endif

我发现了很多其他主题,但是它们并没有真正解决我遇到的问题。
所以问题是这样的:为什么我会收到此错误?如何解决?

最佳答案

您的代码有两个问题:

1.循环依赖
GameObject.h包括Component.hComponent.h包括GameObject.h

这种循环依赖关系破坏了一切。由于包含保护措施的原因,根据GameObject看不到Component或反之亦然,这取决于您是“起始于”哪个文件。

删除循环依赖项:,因为您已经在使用正向声明,所以您根本不需要那些#include通常,在 header 中尽量减少使用#include

2.语法错误

解决此问题后,}; 中添加缺少的Component.h

(您对Transform的定义认为它是Component内的嵌套类,当时尚未完全定义。)

3.保留名称

今天,这可能不会给您带来实际问题,但是您的宏名称不应以_开头,因为它们保留供实现(编译器)使用。

关于c++ - c++基类未定义。在另一个类中包括基类和子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14177159/

10-14 07:57