Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you declare a const array of function pointers?

Firstly, I've got functions like this.

void func1();
void func2();
void func3();

Then I create my typedef for the array:

void (*FP)();

If I write a normal array of function pointers, it should be something like this:

FP array[3] = {&func1, &func2, &func3};

I want to make it a constant array, using const before "FP", but I've got this error messages:

error: cannot convert 'void ( * )()' to 'void ( * const)()' inialization

PD: Sorry my bad English.

EDIT:

x.h

typedef void (*FP)();

class x
{
 private:
  int number;
  void func1();
  void func2();
  void func3();
  static const FP array[3];
}

x.cpp

const FP x::array[3] = {&x::func1, &x::func2, &x::func3};

My code is more large and complex, this is a summary

like image 900
Facon Avatar asked Feb 04 '10 15:02

Facon


3 Answers

Then I create my typedef for the array: void (*FP)();

Did you miss typedef before void?

Following works on my compiler.

 void func1(){}
 void func2(){}
 void func3(){}

 typedef void (*FP)();


 int main()
 {
     const FP ar[3]= {&func1, &func2, &func3};
 }

EDIT

(after seeing your edits)

x.h

 class x;
 typedef void (x::*FP)(); // you made a mistake here

 class x
 {
   public:
      void func1();
      void func2();
      void func3();
      static const FP array[3];
 };
like image 106
Prasoon Saurav Avatar answered Nov 20 '22 12:11

Prasoon Saurav


without typedef:

void (*const fp[])() = {
    f1,
    f2,
    f3,
};
like image 7
vlk Avatar answered Nov 20 '22 11:11

vlk


    typedef void (*FPTR)();

FPTR const fa[] = { f1, f2};
// fa[1] = f2;  You get compilation error when uncomment this line.
like image 2
Jagannath Avatar answered Nov 20 '22 12:11

Jagannath