Alina Danila
Alina Danila

Reputation: 1683

C++ class member pointer to global function

I want to have a class which has as a member a pointer to a function

here is the function pointer:

typedef double (*Function)(double);

here is a function that fits the function pointer definition:

double f1(double x)
{
    return 0;
}

here is the class definion:

class IntegrFunction
{
public:
    Function* function;
};

and somewhere in the main function i want to do something like this:

IntegrFunction func1;
func1.function = f1;

But, this code does not work.

Is it possible to assign to a class member a function pointer to a global function, declared as above? Or do I have to change something in the function pointer definition?

Thanks,

Upvotes: 6

Views: 1377

Answers (5)

Johannes Schaub - litb
Johannes Schaub - litb

Reputation: 506925

Replace

typedef double (*Function)(double);

by

typedef double Function(double);

to typedef the function-type. You can then write the * when using it.

Upvotes: 0

Christian Rau
Christian Rau

Reputation: 45948

You declare the variable as Function* function, but the Function typedef is already a typedef for a pointer. So the type of the function pointer is just Function (without the *).

Upvotes: 2

Slava Semushin
Slava Semushin

Reputation: 15204

Just replace

Function* function;

to

Function function;

Upvotes: 4

Robᵩ
Robᵩ

Reputation: 168626

Replace this:

class IntegrFunction
{
public:
    Function* function;
};

with this:

class IntegrFunction
{
public:
    Function function;
};

Your typedef already creates a pointer-to-function. Declaring Function* function creates a pointer-to-pointer-to-function.

Upvotes: 9

Puppy
Puppy

Reputation: 146910

You need to use the address-of operator to obtain a function pointer in Standard C++03.

func1.function = &f1;

Upvotes: -3

Related Questions