Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clarification with accessing non-static class member function via pointer

Tags:

c++

non-static

I am having difficulty accessing a non-static member function from a function pointer and can't quite figure out my syntax issue. When attempting to compile as seen below I receive "error: fnc_ptr not declared in this scope." and when if the code is modified to not access the function it should point to it compiles and will print out 1 for bar.fn_ptr .To compile I used:

g++ -std=c++11 -Wall example.cpp foo.cpp

The split file structure/namespace is just meant to emulate the same conditions as my original issue.

example.cpp

#include "foo.h"
#include <iostream>

int main(int argc, char* argv[]){

  pizza::foo bar;
  bar.fn_ptr = &pizza::foo::fnc_one;
  std::cout << (bar.*fn_ptr)(1) << std::endl;

  return 0;
}

foo.cpp

#include <cmath>
#include "foo.h"

namespace pizza{

   double foo::fnc_one(double x){
        return pow(x,3) - x + 2;
   }
}

foo.h

namespace pizza{

   class foo{
       public:
        double (foo::*fn_ptr)(double);
        double fnc_one(double);

        foo(){
           fn_ptr = 0;
        }
   };
}

A very similar question can be found here, with additional reference here.

like image 321
20lbpizza Avatar asked May 05 '26 00:05

20lbpizza


1 Answers

You are missing bar. when referring to fn_ptr which is an attribute of that object. Change it to:

  std::cout << (bar.*(bar.fn_ptr))(1) << std::endl;

And it works.

I also recommend reading this FAQ on the subject: https://isocpp.org/wiki/faq/pointers-to-members

like image 175
FBergo Avatar answered May 07 '26 08:05

FBergo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!