0

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

会导致类似'modifying read-only member Test::fa'的错误

4

2 回答 2

2

f1并且f2不是函数指针而是成员函数指针,因此您不能将它们分配给函数指针数组。您可以将它们添加到Test.

于 2012-05-19T18:43:42.373 回答
2

编译器是对的。指针类型为void (Test::*)(). 尝试一下:

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

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

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

于 2012-05-19T18:44:44.940 回答