错误:必须调用对非静态成员函数的引用(2)

时间:2017-04-01 07:04:13

标签: c++

我有一段像这样的代码

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);

为什么会发生这种情况,我该如何纠正呢?

1 个答案:

答案 0 :(得分:3)

由于fn是非静态成员函数,因此单独的fn不是有效表达式。在此上下文中,您对非限定fn唯一可以做的就是调用它:fn(something)。这就是编译器告诉你的。

如果要获取指向成员函数A::fn的指针,则必须使用运算符&并提供合格的成员名称:&A::fn