调用函数指针时出错

时间:2013-11-18 08:59:20

标签: c++ function-pointers

我试图在不同的类中声明和调用函数指针,但在编译时遇到错误。 请参阅以下代码。 注意:这不是实际的代码,而只是具有修改的变量和函数名称的实际代码的一部分。

档案A.h

typedef bool (A::*add_ptr_Typ)(int a,int b ); 

    class A
    {
        public:
        bool add_func(int a,int b );
        void m_assign();
        add_ptr_Typ   add_ptr; 
    }

文件A.cpp

void A::m_assign()
    {
        add_ptr = & A::add_func;
    }
    bool A::add_func(int a,int b )
    {
       if ((a+b) > 10)
       return true;
       else
       return false;
    }

文件B.h

class B
{
public:
add_ptr_Typ   m_add_ptr; 
bool m_process(A* A_ptr);
}

档案B.cpp

bool B::m_process(A* A_ptr)
{
    m_add_ptr = A_ptr->add_ptr;
    (m_add_ptr)(2,3); //error:must use â.*â or â->*â to call pointer-to-member function 
    (*m_add_ptr)(2,3);//error: invalid use of âunary *â on pointer to member
    (this->m_add_ptr)(2,3);//error: must use â.*â or â->*â to call pointer-to-member function 
    this->m_add_ptr(2,3);//error: pointer to member type bool (A::)(int,int) incompatible with object type B
}

我尝试以我知道的所有可能方式调用函数指针(我不知道它们中的一些或全部是错误的)。 我在编译时将错误信息作为注释放在该行前面。

1 个答案:

答案 0 :(得分:4)

你没有处理函数指针,你正在处理指向成员函数的指针。这些是非常不同的野兽。将后者视为“对象中函数的标识符”。您必须将它与对象一起使用才能获得可调用的内容。换句话说,这个:

bool B::m_process(A* A_ptr)
{
    m_add_ptr = A_ptr->add_ptr;
    (A_ptr->*m_add_ptr)(2, 3);
}

->*(和相应的.*)是解除引用指向成员的运算符。