错误:引用非静态成员函数必须被调用(2)
问题描述:
class A {
public:
typedef int (A::*AFn)(int);
std::map<std::string, AFn> fm_;
A() {
fm_.insert("fn1", fn);
}
int fn(int a) {
return a;
}
};
我得到一个编译时错误说error: reference to non-static member function must be called fm_.insert("fn1", fn);
为什么会出现这种情况,一段代码我该如何改正它?
答
由于fn
是一个非静态成员函数,因此单个fn
不是有效的表达式。在此情况下,您可以使用不合格的fn
做的唯一事情是致电 it:fn(something)
。这是编译器告诉你的。
如果你想获得一个指向成员函数A::fn
的指针,你必须公开使用运营商&
并提供合格的成员名称:&A::fn
。
那么,我将如何声明一个允许值为非静态成员函数指针的地图,以及如何使用它? – ace007
@ ace007:地图被正式声明。当你*插入元素到你的地图中时,你必须使用'&A :: fn'语法而不是普通的'fn'。只要做'fm_.insert(“fn1”,&A :: fn);'。就这样。 – AnT
我试过了,它说错误:没有匹配的成员函数调用'insert'fm_.insert(“fn1”,&A :: fn);' – ace007