2015-05-10 123 views
-1

我试图调用一个函数指针指向一个成员函数,我要么得到错误麻烦调用成员函数指针

错误3错误C2064:术语不计算为函数取0 参数

错误3错误C2171: '*':对类型的操作数非法的“富:: 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 
    } 
} 

任何人都可以在这里看到了问题?

+3

这个类的哪个对象将函数用于'this'?你还没有指定任何这样的对象。 – chris

回答

0

正确的语法是

(this->*fptr)(); 

因为它是一个成员函数指针这是必需的,你需要明确提供一个实例来使用fptr当上工作。它可能看起来像编译器已经可以使用隐含的*this,但这不是标准所说的,因此您需要手动处理它。

+0

哇,这很棘手。我认为这总是隐含地要求在课堂上完成的所有事情。但是,果不其然,那已经让它编译了。 – Thundercleez