为什么编译器会将&Foo::foo
视为void (*)()
。我希望将其视为void(Foo::*)()
,因为它是Foo
的成员。
class Foo
{
public:
static void foo ( void ){}
};
void foo ( void(Foo::*)(void) ){}
int main()
{
foo(&Foo::foo); // error: cannot convert ‘void (*)()’ to ‘void (Foo::*)()’
return 0;
}
答案 0 :(得分:2)
您将函数foo声明为 static 。
因此它不是Foo实例的成员函数。
此代码有效:
class Foo
{
public:
static void foo ( void ){}
void foo2() {}
};
void foo ( void(*)(void) ){}
void fooMember ( void(Foo::*)(void) ){}
int main()
{
foo(&Foo::foo);
fooMember(&Foo::foo2);
return 0;
}
编辑:我更新了说明并添加了一段代码。