C++ C++;子函数定义的函数参数

C++ C++;子函数定义的函数参数,c++,function,inheritance,C++,Function,Inheritance,我有一个实体类来处理实体的选择。在这个类中,我有一个函数向量,它被传递到UI,并呈现到下拉菜单中。我希望能够在类中创建继承实体的函数,但将这些函数从实体传递到UI。我该怎么做有什么想法吗 我做了什么 我向实体添加了一个受保护的向量: std::vector<void (*)()> dropDownFunctions; 然后尝试修改继承实体的类中的向量: dropDownFunctions.push_back(&PlayableCharacter::calculateFOV)

我有一个实体类来处理实体的选择。在这个类中,我有一个函数向量,它被传递到UI,并呈现到下拉菜单中。我希望能够在类中创建继承实体的函数,但将这些函数从实体传递到UI。我该怎么做有什么想法吗

我做了什么

我向实体添加了一个受保护的向量:

std::vector<void (*)()> dropDownFunctions;
然后尝试修改继承实体的类中的向量:

dropDownFunctions.push_back(&PlayableCharacter::calculateFOV);
我得到一个错误:

no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back [with _Ty=void (*)(), _Alloc=std::allocator<void (*)()>]" matches the argument list
重载函数“std::vector::push_back[with _Ty=void(*)(,_Alloc=std::allocator]”的实例与参数列表不匹配

calculateFOV
是一个非静态成员函数,因此它有一个隐式的
参数。将其地址作为
&PlayableCharacter::calculateFOV
生成类型
void(PlayableCharacter::*)()
,一个指向成员函数或PTMF的指针,它与
void(*)(
不兼容

假设
PlayableCharacter
来自
实体
,您可以尝试:

typedef void (Entity::* DropDownFn)();
std::vector< DropDownFn > dropDownFunctions;
typedef void(实体::*DropDownFn)();
std::vectorDropDownFn函数;
然后呢,

dropDownFunctions.push_back
                  ( static_cast< DropDownFn >( &PlayableCharacter::calculateFOV ) );
dropDownFunctions.push_后退
(静态播放(&PlayableCharacter::calculateFOV));

您的工作是什么?请告诉我们您的尝试。代码显示超过一千张图片。请尝试创建一个并向我们展示。我已经添加了我的尝试什么类型的calculateFOV?现在将其添加到问题中。我只是在更改
std::vector
还是有其他内容?无论是否有更改,都会出现相同的错误:
参数类型为:(void(PlayableCharacter::*)()
对象类型为:std::vector@genfy抱歉,该转换需要明确,即
静态\u cast
。它只是隐式地从基到派生,这通常看起来是落后的。
typedef void (Entity::* DropDownFn)();
std::vector< DropDownFn > dropDownFunctions;
dropDownFunctions.push_back
                  ( static_cast< DropDownFn >( &PlayableCharacter::calculateFOV ) );