[英]Passing function pointer as vector<pair<string,X>> X argument
这是一些代码:
// Unit.h
typedef void (IInteractable::*fPtr)(Player&);
typedef std::vector<std::pair<std::string, fPtr>> Actions;
// Unit.cpp
Actions Unit::getActions()
{
Actions a;
a.push_back(make_pair("Attack", &Unit::attack));
return a;
}
void attack(Player& p)
{
cout << "Attack!" << endl;
}
我得到的是error: no matching function for call to 'std::vector<std::pair<std::basic_string<char>, void (IInteractable::*)(Player&)> >::push_back(std::pair<const char*, void (Unit::*)(Player&)>)'
,这似乎很奇怪,因为Unit继承自IInteractable。 我花了一些时间使这个问题变得“简单”,但我不知道下一步该怎么做。 有人可以帮忙吗?
您需要在需要IInteractable
成员的地方指定&IInteractable::attack
而不是&Unit::attack
。 指向重写的派生类函数的指针不会转换为指向基类函数的相应指针,即使人们可能希望这种转换是有意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.