我有一段像这样的代码
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);
为什么会发生这种情况,我该如何纠正呢?
答案 0 :(得分:3)
由于fn
是非静态成员函数,因此单独的fn
不是有效表达式。在此上下文中,您对非限定fn
唯一可以做的就是调用它:fn(something)
。这就是编译器告诉你的。
如果要获取指向成员函数A::fn
的指针,则必须使用运算符&
并提供合格的成员名称:&A::fn
。