问:在MFC编程时怎样使用函数指针数组?比如我的myclass类中有func0()~func10() 10个成员函数;
class myclass
{
public:
    void func0();
    void func1();
    ...
    void func10();    static void (*funcarray[10])(void);
}
我想用一个成员数组变量将这些函数指针保存起来,
但是在类定义里不能初始化,在构造函数或初始化函数里也不能赋值,
funcarray[0] = func0;
出现
error C2440: '=' : cannot convert from 'void (__thiscall myclass::*)(void)' to 'void (__cdecl *)(void)'的错误
请问该如何解决呢?因为这些函数也要访问类中的成员变量,但是又没有类的实例来引用,如果不是
类的成员函数的话就无法访问到这些变量救命啊。问题解决便给分。

解决方案 »

  1.   

    make all the func0-func10 static, or try the following
    but you need an instance of object to call these methods#include <stdio.h>class myclass;typedef void (myclass::*MEMFUNC)(void);class myclass
    {
        int i;
    public:
        myclass(int i) {this->i = i;}
        void func0() {printf("func0:%d\n",i++);}
        void func1() {printf("func1:%d\n",i++);}
        void func2() {printf("func2:%d\n",i++);}
        void func3() {printf("func3:%d\n",i++);}
        void func4() {printf("func4:%d\n",i++);}
        void func5() {printf("func5:%d\n",i++);}
        void func6() {printf("func6:%d\n",i++);}
        void func7() {printf("func7:%d\n",i++);}
        void func8() {printf("func8:%d\n",i++);}
        void func9() {printf("func9:%d\n",i++);}
        static MEMFUNC func[10];
    };
    MEMFUNC myclass::func[10];int main()
    {
      myclass mc(10);
      myclass::func[0] = &(myclass::func0);
      myclass::func[1] = &(myclass::func1);
      myclass::func[2] = &(myclass::func2);
      myclass::func[3] = &(myclass::func3);
      myclass::func[4] = &(myclass::func4);
      myclass::func[5] = &(myclass::func5);
      myclass::func[6] = &(myclass::func6);
      myclass::func[7] = &(myclass::func7);
      myclass::func[8] = &(myclass::func8);
      myclass::func[9] = &(myclass::func9);  for (int i=0; i < 10; i++)
       (mc.*myclass::func[i])();  return 0;
    }
      

  2.   

    我试了一下,全部弄成static是可以引用,但是在这些static的成员函数中无法访问其它非static的成员或成员函数。若全部定义成static,那么又无法访问系统API或者MFC已有的类成员函数。对于第二种方法我没有试验,因为是在类的实现文件里编码,如何能使用实例来引用呢。不知道还有没有其它解决方法,请大家帮忙!