看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Windows 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VC++ (VS 2015社群版) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) DxLib 問題(Question): 現在是我在遊戲中要實做敵人路徑和子彈發射路徑, 但我發覺用switch的話程式碼會越做越大, 所以我現在想要照以下網頁講的範例做一個函數指標陣列。 http://dixq.net/rp/12.html 但問題來了,這是C下面的函數指標陣列。 我用同樣的方法在類別內實作時編輯器會出現錯誤。 #include <cmath> #include "DxLib.h" class ENEMY_SAKO { ... void MovePattern01(); void MovePattern02(); void MovePattern03(); void MovePattern04(); void(*EnemyMovePattern[])(void) = { MovePattern01, MovePattern02, MovePattern03, MovePattern04 }; ... } 在黃色的地方編輯器會顯示 「類型"void(ENEMY_SAKO::*)()"的值無法用來初始化類型"void(*)()"的實體。 請問這大概是什麼原因造成的呢?? 有沒有別的方式可以做到一樣的效果? 謝謝!! 註: 各MovePattern的程式碼如下: /*Move Pattern Garage*/ void ENEMY_SAKO::MovePattern01() { double player_x, player_y; (GAMEPLAY::Instance())->GetPlayerPosition(&player_x, &player_y); move_angle = atan2(player_y - y, player_x - x); moveSpeed = 1.5; } void ENEMY_SAKO::MovePattern02() { move_angle = M_PI_4 / 2; moveSpeed = 1.0; } void ENEMY_SAKO::MovePattern03() { } void ENEMY_SAKO::MovePattern04() { move_angle = M_PI_2; moveSpeed = 1.2; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.49.111 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1484815318.A.0E1.html
bachelorwhc: 編譯器說的很清楚 型別不符 01/19 17:35
bachelorwhc: method其實有隱含參數this 只是你看不到 01/19 17:35
bachelorwhc: 請參考 https://goo.gl/csKVFc 01/19 17:36
chchwy: 都用VS2015了 改用lambda來做吧 01/19 20:31
ronin728: 有策略模式 有std::function 為何要用Function pointer 01/21 01:30
w0005151: 延續樓上,effective C++ 條款35可參閱看看 01/23 21:04
Sirctal: 再延續樓上C++11出來後 effective modern c++ item 34 01/24 09:45