无法调用指向成员函数的指针
Trouble calling pointer to member function
我正在尝试调用一个指向成员函数的函数指针,但我得到了错误
Error 3 error C2064: term does not evaluate to a function taking 0
arguments
或
Error 3 error C2171: '*' : illegal on operands of type 'Foo::func_t
我的代码看起来像
class Foo
{
void stuff();
void more_stuff();
void my_func();
typedef void(Foo::* func_t)(void);
func_t fptr;
};
void Foo::my_func()
{
//do some stuff
}
void Foo::stuff()
{
fptr = &Foo::my_func;
}
void Foo::more_stuff()
{
if(fptr != 0)
{
(*fptr)(); //error C2171: '*' : illegal on operands of type 'Foo::func_t
(fptr)(); //term does not evaluate to a function taking 0 arguments
}
}
有人能看到这里的问题吗?
正确的语法是
(this->*fptr)();
这是必需的,因为它是一个 成员 函数指针,您需要在使用 fptr
时显式提供一个要处理的实例。看起来编译器可能已经使用隐式 *this
,但这不是标准所说的,因此您需要手动处理它。
我正在尝试调用一个指向成员函数的函数指针,但我得到了错误
Error 3 error C2064: term does not evaluate to a function taking 0 arguments
或
Error 3 error C2171: '*' : illegal on operands of type 'Foo::func_t
我的代码看起来像
class Foo
{
void stuff();
void more_stuff();
void my_func();
typedef void(Foo::* func_t)(void);
func_t fptr;
};
void Foo::my_func()
{
//do some stuff
}
void Foo::stuff()
{
fptr = &Foo::my_func;
}
void Foo::more_stuff()
{
if(fptr != 0)
{
(*fptr)(); //error C2171: '*' : illegal on operands of type 'Foo::func_t
(fptr)(); //term does not evaluate to a function taking 0 arguments
}
}
有人能看到这里的问题吗?
正确的语法是
(this->*fptr)();
这是必需的,因为它是一个 成员 函数指针,您需要在使用 fptr
时显式提供一个要处理的实例。看起来编译器可能已经使用隐式 *this
,但这不是标准所说的,因此您需要手动处理它。