【使用環境】
Windows10
VisualStudio2019 16.11.2
【状況】
関数ポインタについてサンプルプログラムを作っていて
下記コードで
・「C2664 'void appManager::EntryFunc(void (__cdecl ParamClass:: )(void))': 引数 1 を 'void (__cdecl appUpdate:: )(void)' から 'void (__cdecl ParamClass::* )(void)' へ変換できません。**」
と言うエラーが出るのですが解決法がわからないのと、そもそも関数ポインタの使い方が
これで合っているのかもわからない為、質問させて頂きました。
【コード】
■ appManager.h(一部省略) struct ParamClass { // 関数ポインタ typedef void (ParamClass::* LPFN_FUNC)(void); LPFN_FUNC m_pFunc; }; class appManager { public: appManager(); ~appManager(); private: std::vector< ParamClass> m_ParamList; private: // m_pFuncに登録された関数をコールする関数 void ExecFunc(void); public: // 関数の登録処理 void EntryFunc(void (ParamClass::*lpFunc)()); }; ■ appManager.cpp(一部省略) appManager::appManager() { } appManager::~appManager() { } // 登録した関数の実行 void appManager::ExecFunc() { auto func_list = m_ParamList.size(); for (int i = 0; i < func_list; i ++) { m_ParamList.at(i).m_pFunc; } } // 関数の登録 void appManager::EntryFunc(void (ParamClass::* LPFN_FUNC)()) { std::unique_ptr<ParamClass> class_ptr = std::make_unique<ParamClass>(); class_ptr->m_pFunc = LPFN_FUNC; m_ParamList.push_back(*class_ptr); class_ptr.release(); } ■ appUpdate.h(一部省略) class appUpdate { public: appUpdate(); ~appUpdate(); private: // appManagerのParamClassに登録する関数 void UpdateRender(); }; ■ appUpdate.cpp(一部省略) appUpdate::appUpdate() { appManager* pManager = new appManager(); pManager->EntryFunc(&appUpdate::UpdateRender); delete pManager; } appUpdate::~appUpdate() { } void appUpdate::UpdateRender() { }
宜しくお願いします
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/24 00:40 編集
2021/12/24 01:21
2021/12/24 06:48
2021/12/24 11:21
2021/12/26 05:54 編集
2021/12/26 07:37 編集
2021/12/27 03:01
2021/12/27 03:10 編集
2021/12/27 03:55 編集
2021/12/27 06:55
2021/12/27 07:03
2021/12/27 09:32 編集
2021/12/27 10:54