我正在尝试为本网站上的教程编写一个临时渲染器 .我有两个类SceneObject和RenderComponent.SceneObject应该包含一个RenderComponent,然后应该绘制SceneObject.这是代码:
SceneObject.h
#ifndef _SCENE_OBJECT_H #define _SCENE_OBJECT_H #include#include #include #include #include #include "..\headers\shader.h" #include "..\headers\rendercomponent.h" class SceneObject { private: glm::vec3 position; float *vertices; RenderComponent* renderComponent; std::vector shaders; public: SceneObject(glm::vec3, GLfloat*); ~SceneObject(); bool init(); RenderComponent& getRenderComponent() const; }; #endif
SceneObject.cpp
#include "..\headers\sceneobject.h" SceneObject::SceneObject(glm::vec3 pos, GLfloat* objectVertices) { this->position = pos; this->vertices = objectVertices; renderComponent = new RenderComponent(*this); } SceneObject::~SceneObject() {} RenderComponent& SceneObject::getRenderComponent() const { return *renderComponent; } bool SceneObject::init() { if (!renderComponent->initialize()) { return false; } }
RenderComponent.h
#ifndef _RENDER_COMPONENT_H #define _RENDER_COMPONENT_H #include#include #include #include #include "../headers/sceneobject.h" class RenderComponent { SceneObject &sceneObject; public: RenderComponent(SceneObject&); RenderComponent(const RenderComponent&); bool initialize(); void draw(); SceneObject& getSceneObject() const; }; #endif
RenderComponent.cpp
#include "..\headers\rendercomponent.h" RenderComponent::RenderComponent(SceneObject& obj) :sceneObject(obj){} RenderComponent::RenderComponent(const RenderComponent& ref) : sceneObject(ref.getSceneObject()){} bool RenderComponent::initialize() {} void RenderComponent::draw() {} SceneObject& RenderComponent::getSceneObject() const { return sceneObject; }
产生以下错误.
Error C2143 syntax error: missing ';' before '&' Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Error C2238 unexpected token(s) preceding ';' syntax error: identifier 'SceneObject' Error C2143 syntax error: missing ';' before '&' Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Error C2238 unexpected token(s) preceding ';' Error C2664 'RenderComponent::RenderComponent(const RenderComponent &)': cannot convert argument 1 from 'SceneObject' to 'const RenderComponent &' Error C2143 syntax error: missing ';' before '&' Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Error C2238 unexpected token(s) preceding ';' Error C2061 syntax error: identifier 'SceneObject' Error C2143 syntax error: missing ';' before '&' Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Error C2238 unexpected token(s) preceding ';' Error C2143 syntax error: missing ';' before '*' Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Error C2238 unexpected token(s) preceding ';' Error C2143 syntax error: missing ';' before '&' Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Error C2238 unexpected token(s) preceding ';'
据我所知,编译器说SceneObject不是一个类型.我认为这就是问题所在.任何帮助表示赞赏.
你还sceneobject.h
包括rendercomponent.h
与rendercomponent.h
包括sceneobject.h
.使用包含保护,其中一个不知道另一个头中定义的类.
从一个或两个标题中删除包含,然后转发声明类.