提示コードですがstd::tyep_info
をクラスの引数に取りたいのですが以下のエラーが出ます。これはどうやって解決するのでしょうか?
やりたいこと
クラスの型そのものを引数にとる方法が知りたい。
リファレンス: https://cpprefjp.github.io/reference/typeinfo/type_info.html
Error
shigurechan@shigurechan-System-Product-Name:~/Program/SDLGame/libTest$ make g++ -c -MMD -MP src/Enemy.cpp -o obj/Enemy.o g++ -c -MMD -MP src/Game.cpp -o obj/Game.o g++ -c -MMD -MP src/Main.cpp -o obj/Main.o g++ -c -MMD -MP src/Player.cpp -o obj/Player.o src/Player.cpp: In member function ‘void Player::Collision(std::shared_ptr<SDL::GameObject>)’: src/Player.cpp:29:84: error: expected primary-expression before ‘)’ token 29 | std::dynamic_pointer_cast<SDL::BoxCollision>(getComponent(SDL::BoxCollision))->xxx; | ^ make: *** [Makefile:25: obj/Player.o] エラー 1 shigurechan@shigurechan-System-Product-Name:~/Program/SDLGame/libTest$
Player.Collision
cpp
1void Player::Collision(std::shared_ptr<SDL::GameObject> obj) 2{ 3 std::type_info info(SDL::BoxCollision); 4 std::dynamic_pointer_cast<SDL::BoxCollision>(getComponent(SDL::BoxCollision))->xxx; // エラー 5}
getComponent
cpp
1 2std::shared_ptr<SDL::Component> SDL::GameObject::getComponent(const std::type_info info) 3{ 4 if(std::string(info.name()) == typeid(SDL::BoxCollision).name()) 5 { 6 return std::dynamic_pointer_cast<Component>(boxCollision); 7 } 8 else if(std::string(info.name()) == typeid(SDL::CircleCollision).name()) 9 { 10 return std::dynamic_pointer_cast<Component>(circleCollision); 11 } 12 else if(std::string(info.name()) == typeid(SDL::LineCollision).name()) 13 { 14 return std::dynamic_pointer_cast<Component>(lineCollision); 15 } 16 else if(std::string(info.name()) == typeid(SDL::Sprite_Render).name()) 17 { 18 return std::dynamic_pointer_cast<Component>(spriteRender); 19 } 20 else 21 { 22 return nullptr; 23 } 24 25}
そのエラーは type_info と関係あるんですか?

回答2件
あなたの回答
tips
プレビュー