作者shadowth (ウィンディ@イージス)
看板C_and_CPP
标题[问题] 关於C++的函数指标阵列实作
时间Thu Jan 19 16:41:55 2017
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1484815318.A.0E1.html
1F:→ bachelorwhc: 编译器说的很清楚 型别不符 01/19 17:35
2F:→ bachelorwhc: method其实有隐含参数this 只是你看不到 01/19 17:35
4F:推 chchwy: 都用VS2015了 改用lambda来做吧 01/19 20:31
5F:推 ronin728: 有策略模式 有std::function 为何要用Function pointer 01/21 01:30
6F:→ w0005151: 延续楼上,effective C++ 条款35可参阅看看 01/23 21:04
7F:推 Sirctal: 再延续楼上C++11出来後 effective modern c++ item 34 01/24 09:45