提示コードですがActor
クラスを継承したGame
クラスをcamera->View()
関数でActor
クラスにアップキャストしたいのですが下記のエラーになりますこれはなぜでしょうか?
Console
shigurechan@shigurechan-System-Product-Name:~/prg/TopDownGame$ make g++ -g -c -MMD -MP source/Entry.cpp -o object/Entry.o source/Entry.cpp: In member function ‘void Entry::Renderer()’: source/Entry.cpp:19:18: error: cannot convert ‘shared_ptr<Game>’ to ‘shared_ptr<FrameWork::Actor>’ 19 | camera->View(game); | ^~~~ | | | shared_ptr<Game> In file included from source/../header/../FrameWork/FrameWork/FrameWork.hpp:15, from source/../header/Entry.hpp:4, from source/Entry.cpp:1: source/../header/../FrameWork/FrameWork/../header/Camera.hpp:44:36: note: initializing argument 1 of ‘void FrameWork::Camera::View(std::shared_ptr<FrameWork::Actor>)’ 44 | void View(std::shared_ptr<Actor> actor); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ make: *** [Makefile:25: object/Entry.o] エラー 1 shigurechan@shigurechan-System-Product-Name:~/prg/TopDownGame$
Camera.cpp
cpp
// ##################################### 描画 ##################################### void FrameWork::Camera::View(std::shared_ptr<Actor> actor) { glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); glViewport(0, 0, windowContext->getSize().x, windowContext->getSize().y); //actor->Renderer_Depth(getViewPerspective()); glBindFramebuffer(GL_FRAMEBUFFER, frameBufferFBO); glViewport(0, 0, windowContext->getSize().x, windowContext->getSize().y); glEnable(GL_DEPTH_TEST); // actor->Renderer(getViewPerspective()); glDepthFunc(GL_LEQUAL); actor->Renderer(getViewOrthographic()); // actor->Renderer(getViewPerspective()); glDepthFunc(GL_LESS); glBindFramebuffer(GL_FRAMEBUFFER,0); }
Entry.cpp
cpp
#include "../header/Entry.hpp" #include <iostream> #include "../header/Game.hpp" #include "../FrameWork/FrameWork/FrameWork.hpp" Entry::Entry() { camera = std::make_shared<FrameWork::Camera>(); game = std::make_shared<Game>(); } void Entry::Update() { } void Entry::Renderer() { /////////////////////////////////////////////////// camera->View(game); / /////////////////////////////////////////////////// } void Entry::Loop() { camera->ClearBuffer(); Update(); Renderer(); camera->RendererBuffer(); } Entry::~Entry() { }
Game.hpp
cpp
#ifndef ___GAME_HPP___ #define ___GAME_HPP___ #include "../FrameWork/FrameWork/FrameWork.hpp" #include <glm/glm.hpp> class Game : FrameWork::Actor { public: Game(); ~Game(); void Update(); void Renderer(const glm::mat4 view)const; private: FrameWork::Texture texture; }; #endif
Game.cpp
cpp
#include "../header/Game.hpp" Game::Game() : Actor() { texture = FrameWork::LoadTexture("Asset/resource.png"); } void Game::Update() { } void Game::Renderer(const glm::mat4 view)const { //FrameWork::RendererSprite(camera->getViewPerspective(),texture,glm::vec3(50,50,-1),glm::ivec2(3,3),glm::ivec2(32,16)); FrameWork::RendererSprite(view,texture,glm::vec3(50,50,-1),glm::ivec2(3,3),glm::ivec2(32,16)); } Game::~Game() { }
Actro.hpp
cpp
#ifndef ___ACTOR_HPP_ #define ___ACTOR_HPP_ #include <memory> #include <GL/glew.h> #include <glm/glm.hpp> namespace FrameWork { class Actor { public: Actor(); ~Actor(); virtual void Update() = 0; virtual void Renderer(const glm::mat4 view)const = 0; protected: }; } #endif
まだ回答がついていません
会員登録して回答してみよう