问:在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)'的错误
请问该如何解决呢?因为这些函数也要访问类中的成员变量,但是又没有类的实例来引用,如果不是
类的成员函数的话就无法访问到这些变量救命啊。问题解决便给分。
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)'的错误
请问该如何解决呢?因为这些函数也要访问类中的成员变量,但是又没有类的实例来引用,如果不是
类的成员函数的话就无法访问到这些变量救命啊。问题解决便给分。
解决方案 »
- skinsharp把我自己绘制的控件也给重绘了,咋办
- 如何在任意应用程序的菜单栏添加一个按钮?
- 用钩子禁止系统的复制功能该怎么做?
- 请教:有劳各位高手帮忙解决一下这个问题
- 求助:在dll中使用模板类
- 想用vc做一个语音聊天的组建放到asp/aspx里做语音聊天室,不知道怎么下手,大家给点思路
- CFile::Abort ,请问在VC中怎么样创建CFile这个类,然后怎么去验证Abort
- up! up! 简单问题, 当scrollbar隐藏以后如何让listctrl中的内容滚动
- 哪位解释一下XP开发是怎么回事啊
- int类型的长度
- wilehorse进来取分(3)。
- 请问activeX控件的oncreate函数怎么写?
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;
}