2017-04-01 63 views
0

我有這樣錯誤:引用非靜態成員函數必須被調用(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);

爲什麼會出現這種情況,一段代碼我該如何改正它?

回答

2

由於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

相關問題