views:

104

answers:

3

Hello! I'm trying to have pointer to class methods, so I have something like:

class foo {
    public:
    static void bar() {
}
};

void (foo::*bar)() = &foo::bar;

That doesn't compile :( I get:

> error: cannot convert ‘void (*)()’ to
> ‘void (foo::*)()’ in
> initialization
+2  A: 

A pointer to a static member has the same type as a pointer to non-member.

Try:

void (*bar)() = &foo::bar;
Charles Bailey
tnx a lot for quick answer :)
mfolnovich
+2  A: 

bar() is a static function, in other words there is not this parameter.

void (*myfunptr)() = &(foo::bar);
AraK
tnx a lot for quick answer :)
mfolnovich
+2  A: 

A static method, when used by name rather than called, is a pointer.

void (*bar)() = foo::bar; // used as a name, it's a function pointer
...
bar(); // calls it
Will
tnx a lot for quick answer :)
mfolnovich
No, it's not a pointer, it's a function. It does *decay* to a function pointer though.
avakar
Which is rather the point?
Will