2

I have the following code:

#include<iostream> using namespace std; typedef void (*HandlerFunc)(int, int); HandlerFunc mr; HandlerFunc mm() { return mr; } void sample(int a, int b, HandlerFunc func) { } void main() { sample(1, 2, mm); } 

Here I'm trying to pass a function of type HandlerFunc to another function, but I am getting an error:

Error :*: cannot convert parameter 3 from 'void (__cdecl *(void))(int,int)' to 'void (__cdecl *)(int,int)'

If I type cast as sample(1, 2, (HandlerFunc)mm); everything works fine.
Can anyone tell what is the way to solve the error issue?

1
  • Do you want mm() to return the function pointer, or want to define mm as the type HandlerFunc? Commented Jun 20, 2012 at 10:42

4 Answers 4

5
HandlerFunc mm() {...} 

should be:

void mm(int, int) {...} 

Your function sample() takes a pointer to function(you typedefd as HandlerFunc) as last argument. The address of the function you pass as this argument must match the type of the function to which it is a pointer.

Sign up to request clarification or add additional context in comments.

Comments

4

No, no, you've confused the types. mm is a function that returns a function pointer of the appropriate type. However, mm itself is not of the appropriate type - it doesn't accept any parameters.

You should pass mr in main, or pass mm() (that is - call mm and pass the return value)

Comments

0

The code in main should be:

sample(1,2,mm()); 

as mm returns a HandlerFunc, it isn't one itself.

Comments

0
HandlerFunc mm() { return mr; } 

This means nm is function which will not receive any agruments(void), and it will reutrn a pointer to function of type void (*)(int, int)

so that only you are getting that error.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.