我对以下行为感到困惑:
我的类“Application”在“SplashScreen”类型的构造函数元素中添加(从我的类“Screen”派生,它是容器类型),使用ptr_map_insert到Screen类型的指针容器中。例如:
boost::assign::ptr_map_insert<SplashScreen>(screenContainer_)(GameScreens::Splash, curWindow_, curFileSystem_, curInputManager_);
根据ptr_map_insert的文档,最后一对括号以键开头,后面的参数传递给SplashScreen类的构造函数。
curWindow_等是我的班级“应用程序”的非const私有成员
我不知道为什么,但是GCC报告错误,因为传递给构造函数的参数是const引用,而SplashScreen的构造函数需要定期引用。
SplashScreen(sf::RenderWindow& curWindow, System::FileSystem& curFileSystem, System::InputManager& curInputManager);
完整的错误消息在我的下方和部分翻译,因为它是德语。
/usr/include/boost/preprocessor/iteration/detail/local.hpp: In Elementfunktion »boost::assign::ptr_map_inserter<PtrMap, Obj>& boost::assign::ptr_map_inserter<PtrMap, Obj>::operator()(const T&, const T0&, const T1&, const T2&) [with T = Oxid::GameScreens::gameScreenEnum, T0 = sf::RenderWindow, T1 = Oxid::System::FileSystem, T2 = Oxid::System::InputManager, PtrMap = boost::ptr_map<Oxid::GameScreens::gameScreenEnum, Oxid::Screen>, Obj = Oxid::Game::SplashScreen, boost::assign::ptr_map_inserter<PtrMap, Obj> = boost::assign::ptr_map_inserter<boost::ptr_map<Oxid::GameScreens::gameScreenEnum, Oxid::Screen>, Oxid::Game::SplashScreen>]«:
/blabla/main/application.cpp:42:132: instanced(?) from here
/usr/include/boost/preprocessor/iteration/detail/local.hpp:43:1: Error: no matching function for calling »Oxid::Game::SplashScreen::SplashScreen(const sf::RenderWindow&, const Oxid::System::FileSystem&, const Oxid::System::InputManager&)«
/usr/include/boost/preprocessor/iteration/detail/local.hpp:43:1: Anmerkung: candidates are :
../include/splashscreen.h:16:17: Anmerkung: Oxid::Game::SplashScreen::SplashScreen(sf::RenderWindow&, Oxid::System::FileSystem&, Oxid::System::InputManager&)
../include/splashscreen.h:16:17: Anmerkung: no known conversion for argument 1 from »const sf::RenderWindow« to »sf::RenderWindow&«
../include/splashscreen.h:13:15: Anmerkung: Oxid::Game::SplashScreen::SplashScreen(const Oxid::Game::SplashScreen&)
../include/splashscreen.h:13:15: Anmerkung: candidate requires 1 Argument, 3 denoted
boost sourcecode并不表示参数已更改为const或类似的东西。我忽略了这种转换发生了什么?
编辑:刚刚查看了实际的提升更改日志(我使用的是1.48.0),但它们不包含有关此问题的内容。
此致
答案 0 :(得分:0)
当我查看源代码时,它似乎确实采用了const引用的参数,大概是在大多数情况下你没有丢失const问题。我相信,在您的情况下,您将不得不直接在insert
而不是帮助模板上使用ptr_map
。