我想在std::array
内存储函数指针,但在尝试不同的方法之后,我仍然无法编译我的程序。
这是在编译之前不会抛出错误的版本。
namespace logic {
class Chance : public Field {
std::array<void(logic::Chance::*)(), 18> m_redChances;
public:
Chance(ChanceType type);
void redChance1();
void redChance2();
...
void redChance18();
};
}
logic::Chance::Chance(ChanceType type)
: Field(false), m_type(type)
{
m_redChances[0] = redChance1;
m_redChances[1] = redChance2;
....
m_redChances[17] = redChance18;
}
它给了我
非标准语法;使用'&amp;'创建指向成员的指针
试图做这样的事情
m_redChances[0] = &redChance1;
结束
'&amp;':对绑定成员函数表达式的非法操作
试图像我这样声明我的数组
std::array<void(*)(), 18> m_redChances;
类型为“void(logic :: Chance :: )()”的值不能分配给类型为“void()()”的实体
编辑:
所以在实现它之后:
m_redChances[0] = &Chance::redChance1;
它有效。我怎样才能实际调用这个函数(如果重要的话,我是从另一个成员函数调用它的。)
我尝试了各种各样的东西:
void logic::Chance::activate(logic::Player& player){
m_redChances[0];
*m_redChances[0];
m_redChances[0]();
(*m_redChances[0])();
}
在我编译之前,只有第一行没有被强调并标记为错误,但它并没有调用我的函数。那怎么能实现呢?