
提示コードですが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
1 2// ##################################### 描画 ##################################### 3void FrameWork::Camera::View(std::shared_ptr<Actor> actor) 4{ 5 6 glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); 7 glViewport(0, 0, windowContext->getSize().x, windowContext->getSize().y); 8 9 //actor->Renderer_Depth(getViewPerspective()); 10 11 glBindFramebuffer(GL_FRAMEBUFFER, frameBufferFBO); 12 glViewport(0, 0, windowContext->getSize().x, windowContext->getSize().y); 13 14 glEnable(GL_DEPTH_TEST); 15// actor->Renderer(getViewPerspective()); 16 17 glDepthFunc(GL_LEQUAL); 18 actor->Renderer(getViewOrthographic()); 19// actor->Renderer(getViewPerspective()); 20 glDepthFunc(GL_LESS); 21 22 glBindFramebuffer(GL_FRAMEBUFFER,0); 23}
Entry.cpp
cpp
1#include "../header/Entry.hpp" 2#include <iostream> 3#include "../header/Game.hpp" 4#include "../FrameWork/FrameWork/FrameWork.hpp" 5 6Entry::Entry() 7{ 8 camera = std::make_shared<FrameWork::Camera>(); 9 game = std::make_shared<Game>(); 10} 11 12void Entry::Update() 13{ 14 15} 16 17void Entry::Renderer() 18{ 19/////////////////////////////////////////////////// 20 camera->View(game); / 21/////////////////////////////////////////////////// 22} 23 24void Entry::Loop() 25{ 26 camera->ClearBuffer(); 27 28 29 Update(); 30 Renderer(); 31 32 33 34 camera->RendererBuffer(); 35 36} 37 38Entry::~Entry() 39{ 40 41} 42 43
Game.hpp
cpp
1#ifndef ___GAME_HPP___ 2#define ___GAME_HPP___ 3 4#include "../FrameWork/FrameWork/FrameWork.hpp" 5#include <glm/glm.hpp> 6 7class Game : FrameWork::Actor 8{ 9public: 10 Game(); 11 ~Game(); 12 13 void Update(); 14 void Renderer(const glm::mat4 view)const; 15private: 16 17 FrameWork::Texture texture; 18 19}; 20 21#endif 22
Game.cpp
cpp
1#include "../header/Game.hpp" 2 3Game::Game() : Actor() 4{ 5 texture = FrameWork::LoadTexture("Asset/resource.png"); 6} 7 8void Game::Update() 9{ 10 11} 12void Game::Renderer(const glm::mat4 view)const 13{ 14 //FrameWork::RendererSprite(camera->getViewPerspective(),texture,glm::vec3(50,50,-1),glm::ivec2(3,3),glm::ivec2(32,16)); 15 FrameWork::RendererSprite(view,texture,glm::vec3(50,50,-1),glm::ivec2(3,3),glm::ivec2(32,16)); 16} 17 18Game::~Game() 19{ 20 21} 22
Actro.hpp
cpp
1#ifndef ___ACTOR_HPP_ 2#define ___ACTOR_HPP_ 3 4#include <memory> 5#include <GL/glew.h> 6#include <glm/glm.hpp> 7namespace FrameWork 8{ 9 class Actor 10 { 11 public: 12 13 Actor(); 14 ~Actor(); 15 16 virtual void Update() = 0; 17 virtual void Renderer(const glm::mat4 view)const = 0; 18 19 protected: 20 21 }; 22} 23#endif

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
退会済みユーザー
2022/02/03 04:25
2022/02/03 05:58
2022/02/03 06:00 編集
2022/02/03 06:03
2022/02/03 06:31