Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/forums/cpp/)
-   -   Array of function pointers in C++ (http://www.go4expert.com/forums/array-function-pointers-cpp-t19494/)

punith 20Sep2009 18:23

Array of function pointers in C++
 
Hi All,

I was trying out a simple program to understand array of function pointers in C++.
Code:

#include <iostream>

class a
{

  public:
  void func_1 ();
  void func_2();
  void (a::*arrfptr[2])();
  a();
};

void a::func_1()
{
  std::cout<<"\n func_1\n";
}
void a::func_2()
{
  std::cout<<"\n func_2\n";
}
a::a()
{
  a::arrfptr[0]=& a::func_1;
  a::arrfptr[1]=& a::func_2;
}

class b
{
  public:
  void func_b();
};

void b::func_b()
{
  a obj;
  (obj.*arrfptr[0]) ();
  (obj.*arrfptr[1]) ();
}

int main()

{
  b o;
  o.func_b();
}


while compiling I am getting this error
Code:

[root@localhost example]# g++ fptr.cpp
fptr.cpp: In member function ‘void b::func_b()’:
fptr.cpp:36: error: ‘arrfptr’ was not declared in this scope
[root@localhost example]#

arrfptr is public in class a then why i am not able to access it in class b ?

Thanking you in Advance

xpi0t0s 25Sep2009 15:59

Re: Array of function pointers in C++
 
You have to make the functions static to be able to take their addresses. This is because of the way object orientation works; if an object doesn't exist, then its functions don't exist either, so to make the functions exist whether or not there is an object in existence then the functions have to be static.
Code:

class a
{

  public:
  static void func_1 ();
  static void func_2();
  void (*arrfptr[2])();
  a();
};

void a::func_1()
{
  std::cout<<"\n func_1\n";
}
void a::func_2()
{
  std::cout<<"\n func_2\n";
}
a::a()
{
        arrfptr[0]=&func_1;
        arrfptr[1]=&func_2;
}

class b
{
  public:
  void func_b();
};

void b::func_b()
{
  a obj;
  (obj.arrfptr[0])();
  (obj.arrfptr[1])();
}


punith 26Oct2009 13:42

Re: Array of function pointers in C++
 
Hi,
thanks it works now, but as you said if object dosen't exist then function dosen't exist, but I am creating the object
Code:

a obj;


All times are GMT +5.5. The time now is 06:01.