编程中遇到的一个亦易亦难的问题
代码如下:#include <iostream.h>
// ================= 定义三个类
class Ctest0 { // class 0
public:
void __cdecl fn0() {
cout<<"test0"<<endl;
}
};
class Ctest1 { // class 1
public:
void __cdecl fn1() {
cout<<"test1"<<endl;
}
};
class Ctest2 { // class 2
public:
void __cdecl fn2() {
cout<<"test2"<<endl;
}
};
void main() {
Ctest0 t0; // 实例化三个对象
Ctest1 t1;
Ctest2 t2;
typedef void (*Fun[3])();
Fun f ; // 定义一个指针函数数组
f[0] = t0.fn0; // !!!编译出错
f[1] = t1.fn1; // !!!编译出错
f[2] = t2.fn2; // !!!编译出错
for(int i=0;i<3;i++) // 通过数组调用个对象中的功能函数
f[i]();
}
编译出错提示(3个同样的错误):
...cannot convert from 'void (__cdecl Ctest0::*)(void)' to 'void (__cdecl *)(void)'
如果把类中fn0()函数声明中的"__cdecl"去掉。则出错提示如下:
...cannot convert from 'void (__stdcall Ctest0::*)(void)' to 'void (__cdecl *)(void)'
该程序是实际编程遇到的问题的一个简化。其意图是把各类中相应的功能函数的指针放在一个数组内,以便于程序自动调用运行。这是一种常用的编程手段。但是我始终编译不成功,无法把各类函数的指针装入数组内。
可是如果这些函数不是类的成员函数(如全局函数),就可以装入指针数组(编译通过并运行正常)。只要是类的成员函数(哪怕这些函数都集中在一个类中)就无法通过编译。出现上面的错误提示。
此问题困惑我快一周了, c++新手恳请大家指点迷津。先谢过
[ 本帖最后由 处c 于 2010-3-12 13:33 编辑 ]