函数指针 - 显式调用括号前的表达式必须具有(指向)函数类型

function pointer - Expression preceding parentheses of apparent call must have (pointer-to-) function type

我有一个 class:

#include<map>

class myclass {
public:

    typedef std::map<std::string, int(myclass::*)()> mymap;

    void Foo() {
        UpdateMap();
        mymap1["AddToa"]();
        mymap1["AddTob"]();
    }


private:
    int a;
    int b;

    mymap mymap1;

    int AddToa(){ std::cout<< "add 2 to a: " << a+2 << std::endl;};
    int AddTob(){ std::cout<< "add 2 to b: " << b+2 << std::endl;};

    void UpdateMap(){
        mymap1["AddToa"] = &myclass::AddToa;
        mymap1["AddTob"] = &myclass::AddTob;
    }
};

但是在 Foo() 中,当我试图通过它们的指针调用这两个函数时:

mymap1["AddToa"]();

我得到这个编译错误:

显式调用括号前的表达式必须具有(指向)函数类型

我该怎么办?

您似乎想调用当前class上的成员函数指针。

(this->*mymap1["AddToa"])();

研究member access operators.