1. ホーム
  2. c++

[解決済み] エラーです。非静的メンバ関数への参照を呼び出す必要があります (2)

2022-02-05 21:38:17

質問

次のようなコードがあります。

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 この文脈では コール それを fn(something) . これは、コンパイラが教えてくれていることです。

メンバ関数へのポインタを取得したい場合 A::fn を使用する必要があります。 & を指定し、修飾されたメンバー名を指定します。 &A::fn .