‘class GenericModel / 缺少 class 名称 / 继承的 C++ 前向声明

C++ forward declaration of ‘class GenericModel / missing class name / inheritance

我偶然发现了一个继承问题。所以我在 3 个单独的 headers 中有 3 个 classes 定义如下:

通用Object -> Object 通用Object -> 浅色Object

先继承object:

#ifndef GENERICMODEL_HPP
#define GENERICMODEL_HPP

#define NO_SDL_GLEXT
#define GLM_FORCE_RADIANS 
#include <GL/glew.h>//before opengl
#include <SDL2/SDL.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <glm/glm.hpp>
#include <vector>
#include <glm/gtc/matrix_transform.hpp>

#include "GenericShader.hpp"
#include "BaseObject.hpp" 
#include "Scene.hpp"

#define FRAGMENT_SHADER 0
#define VERTEX_SHADER 1

class GenericShader;
class Scene;

class GenericModel: public BaseObject{
public:
    GenericModel();
    ~GenericModel();
    virtual void Render();
    bool LoadShaderProgram(char*,char*);
    void BindShaders(GenericShader *);
    void UpdatePosition(glm::vec3);
    void UpdateRotation(float,glm::vec3);
    void UpdateScale(glm::vec3);
    void UpdateMatrix();

    bool shadersLoaded;
    int scenePosNum = 0;
    GLuint programID;//for now
    GLuint vertexBuffer;
    glm::mat4 MVP;
    glm::mat4 modelMatrix;
    //Scene *scene;

protected:

    GenericShader *shaderObj= NULL;
    GLuint vaoID;
    Uint32 verticesCount;
    float angle; 
    glm::vec3 locationVector;
    glm::vec3 rotationVector;
    glm::vec3 scaleVector;
    Scene *scene;
};
#endif

第二个:

#ifndef MODEL_HPP
#define MODEL_HPP


#include "GenericModel.hpp"
#include <libxml/parser.h>
#include <libxml/tree.h>

class GenericModel;

class Model : public GenericModel{

public:
    Model();
    ~Model();
    void Render();
    bool LoadModelOBJ(char *);
    bool LoadModelXML(char *);
    bool LoadTexture(char *);

private: 
    GLuint textureID;
    GLuint texture;
    bool modelLoaded;
    bool textureLoaded;
    GLuint textureBuffer;
    bool OpenOBJModel(char*, std::vector<glm::vec3> & , std::vector<glm::vec2> & , std::vector<glm::vec3> & );
    bool OpenXMLModel(char *filename, std::vector<glm::vec3> & vertOut, std::vector<glm::vec2> & uvOut, std::vector<glm::vec3> & normalOut);
};
#endif

第三名:

#ifndef LIGHT_OBJECT_HPP
#define LIGHT_OBJECT_HPP

#include "GenericModel.hpp"

class GenericModel; //PROBLEM

class LightObject: public GenericModel {

public:
    LightObject();
    ~LightObject();
    void Render();
    glm::vec3 GetLight();
    void SetLight(glm::vec3);

private:
    glm::vec3 lightIntenzity;

};
#endif

当我尝试编译它们时,出现错误

LightObject.hpp:9:27: error: invalid use of incomplete type ‘class GenericModel’ class LightObject: public GenericModel { ^ LightObject.hpp:7:7: error: forward declaration of ‘class GenericModel’ class GenericModel;

如果我删除前向声明,会出现新的错误:

LightObject.hpp:9:40: error: expected class-name before ‘{’ token class LightObject: public GenericModel {

这让我很困惑,因为模型 class 没有问题,这是以相同的方式完成的。带有 include 的前向声明。谁能指出我正确的方向?提前致谢! (顺便说一句,Base object 只是 ID)

可能其中之一包括 LightObject.hpp:

#include "GenericShader.hpp"
#include "BaseObject.hpp" 
#include "Scene.hpp"