C++ pointer to member function getting an error : not a function or function pointer
C++ pointer to member function getting an error : not a function or function pointer
这是我的资料:
一个class PostfixCalculator,具有public个成员方法:
class PostfixCalculator
{
public:
PostfixCalculator();
int top();
int popTop();
void pushNum(int);
void add();
void minus();
void multiply();
void divide();
void negate();
bool empty();
void pushSymbol(string);
当我尝试通过指向成员函数的指针调用成员函数时,我尝试了类似下面的方法(我知道该方法没有多大意义,它只是一个测试):
void PostfixCalculator::pushSymbol(string str)
{
func f = &PostfixCalculator::add;
this.*(f)();
}
但是,我收到以下编译器错误:
> postfixCalculator.cpp:84:12: error: called object type 'func' (aka
> 'void (PostfixCalculator::*)()') is not a function or function pointer
> this.*(f)();
> ~~~^ 1 error generated.
我在 fedora linux.
下使用 clang++ 编译我的程序
this
是一个指针,所以你应该使用 ->
并且 deref * 比函数调用 ()
的优先级低,所以你应该使用 (this->*f)()
首先,this
是一个指针,这意味着你必须对它应用->*
,而不是.*
。如果你想使用 .*
,你必须先用 *
取消引用 this
。
其次,函数调用运算符()
的优先级高于.*
或->*
运算符,这意味着你需要额外的括号来确保指针f
是首先解除引用,函数调用 ()
应用于该解除引用的结果。
应该是
(this->*f)();
或者
(*this.*f)();
这是我的资料:
一个class PostfixCalculator,具有public个成员方法:
class PostfixCalculator
{
public:
PostfixCalculator();
int top();
int popTop();
void pushNum(int);
void add();
void minus();
void multiply();
void divide();
void negate();
bool empty();
void pushSymbol(string);
当我尝试通过指向成员函数的指针调用成员函数时,我尝试了类似下面的方法(我知道该方法没有多大意义,它只是一个测试):
void PostfixCalculator::pushSymbol(string str)
{
func f = &PostfixCalculator::add;
this.*(f)();
}
但是,我收到以下编译器错误:
> postfixCalculator.cpp:84:12: error: called object type 'func' (aka
> 'void (PostfixCalculator::*)()') is not a function or function pointer
> this.*(f)();
> ~~~^ 1 error generated.
我在 fedora linux.
下使用 clang++ 编译我的程序this
是一个指针,所以你应该使用 ->
并且 deref * 比函数调用 ()
的优先级低,所以你应该使用 (this->*f)()
首先,this
是一个指针,这意味着你必须对它应用->*
,而不是.*
。如果你想使用 .*
,你必须先用 *
取消引用 this
。
其次,函数调用运算符()
的优先级高于.*
或->*
运算符,这意味着你需要额外的括号来确保指针f
是首先解除引用,函数调用 ()
应用于该解除引用的结果。
应该是
(this->*f)();
或者
(*this.*f)();