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

问题描述:

我有这样错误:引用非静态成员函数必须被调用(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

+0

那么,我将如何声明一个允许值为非静态成员函数指针的地图,以及如何使用它? – ace007

+0

@ ace007:地图被正式声明。当你*插入元素到你的地图中时,你必须使用'&A :: fn'语法而不是普通的'fn'。只要做'fm_.insert(“fn1”,&A :: fn);'。就这样。 – AnT

+0

我试过了,它说错误:没有匹配的成员函数调用'insert'fm_.insert(“fn1”,&A :: fn);' – ace007