次の動作に混乱しています。
私のクラス「Application」は、ptr_map_insert を使用してタイプ「SplashScreen」(コンテナー タイプである私のクラス「Screen」から派生) のコンストラクター要素をタイプ Screen のポインター コンテナーに追加します。例:
boost::assign::ptr_map_insert<SplashScreen>(screenContainer_)(GameScreens::Splash, curWindow_, curFileSystem_, curInputManager_);
ptr_map_insert のドキュメントによると、最後の括弧のペアはキーで始まり、次の引数が SplashScreen クラスのコンストラクターに渡されます。
curWindow_ などは、私のクラス「アプリケーション」の非 const プライベート メンバーです。
理由はわかりませんが、コンストラクターに渡される引数は const 参照であり、SplashScreen のコンストラクターには通常の参照が必要であるため、GCC はエラーを報告します。
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
ブーストのソースコードは、引数が const などに変更されたことを示していません。この変換が発生することを見逃していたのは何ですか?
編集:実際のブーストの変更ログ (私は 1.48.0 を使用しています) を見ただけですが、この問題については何も含まれていません。
よろしく