“class GenericModel的C++正向声明/缺少类名/继承.”
C++ forward declaration of ‘class GenericModel / missing class name / inheritance
我偶然发现了一个继承问题。因此,我在3个单独的头中定义了3个类,如下所示:
GenericObject->ObjectGenericObject->LightObject
首先是继承的对象:
#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.hp:9:27:错误:无效使用了不完整的类型"class GenericModel"类LightObject:公共GenericModel{^LightObject.hp:7:7:错误:"class GenericModel"的正向声明类GenericModel;
如果我删除转发声明,则会出现新的错误:
LightObject.hpp:9:40:错误:在"{"标记之前需要类名类LightObject:公共GenericModel{
这让我很困惑,因为它和Model类并没有问题,这是用同样的方式完成的。包含的转发声明。有人能给我指正确的方向吗?提前感谢!(BTW基本对象只是ID)
其中可能包括LightObject.hpp:
#include "GenericShader.hpp"
#include "BaseObject.hpp"
#include "Scene.hpp"
相关文章:
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 如何在QT Creator上将QWidget声明为继承类的对象
- 为什么C++需要公共继承,忽略朋友声明,才能使动态向下工作?
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 在使用受保护和继承时无法访问在类中声明的私有成员
- C++ 声明继承的构造函数?
- C++具有继承列表的模板声明
- 如何对继承的文件使用前向声明
- 抽象类 A 由类 C 继承"through"类 B "intermediary"。如何声明虚拟功能?
- 有什么理由在没有继承的情况下声明一个虚拟方法
- 具有继承的未声明标识符(运算符 ostream)
- 为什么使用声明不会继承移动构造函数
- 带有递归继承和使用声明的Variadic模板
- 带有智能指针和继承的构造函数的前向声明
- 声明从C 中的其他类模板继承的类模板
- 错误 - 根据 G++ 未声明的继承类字段
- 在C 中使用继承时,请避免使用未缴纳的函数声明/定义
- 来自无法识别的继承结构的本地声明
- C++ 嵌套前向声明继承
- clang/g++ 与私有继承和使用声明的区别