在C ++中定义和初始化非const函数指针的静态const数组

时间:2012-05-19 18:41:26

标签: c++

无法得到它。 使用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'

2 个答案:

答案 0 :(得分:2)

f1f2不是函数指针而是成员函数指针,因此您无法将它们分配给函数指针数组。您可以将它们添加到Test的成员函数指针数组中。

答案 1 :(得分:2)

编译器是对的。指针类型为void (Test::*)()。试试吧:

typedef void (Test::*FPTR)();

FPTR const Test::fa[] = { &Test::f1, &Test::f2 };  // nicer to read!

f1f2不是函数(即自由函数),而是(非静态)成员函数。那些是非常不同的动物:你可以调用一个函数,但你不能只调用一个成员函数。您只能在实例对象上调用成员函数,其他任何内容都没有意义。