无法得到它。 使用g ++编译器。
代码:
#include <iostream>
using namespace std;
typedef void (* FPTR) ();
class Test
{
void f1()
{
cout << "Do nothing 1" << endl;
}
void f2()
{
cout << "Do nothing 2" << endl;
}
static FPTR const fa[];
};
FPTR const Test::fa[] = {f1, f2};
错误:
test.cpp:22: error: argument of type ‘void (Test::)()’ does not match ‘void (* const)()’
test.cpp:22: error: argument of type ‘void (Test::)()’ does not match ‘void (* const)()’
我只想获得常量的函数指针数组,所以
fa[0] = f2;
会导致错误,例如'修改只读成员Test :: fa'
答案 0 :(得分:2)
f1
和f2
不是函数指针而是成员函数指针,因此您无法将它们分配给函数指针数组。您可以将它们添加到Test
的成员函数指针数组中。
答案 1 :(得分:2)
编译器是对的。指针类型为void (Test::*)()
。试试吧:
typedef void (Test::*FPTR)();
FPTR const Test::fa[] = { &Test::f1, &Test::f2 }; // nicer to read!
f1
和f2
不是函数(即自由函数),而是(非静态)成员函数。那些是非常不同的动物:你可以调用一个函数,但你不能只调用一个成员函数。您只能在实例对象上调用成员函数,其他任何内容都没有意义。