2013-11-18 4 views
2

Я пытаюсь объявить и вызвать указатель функции внутри разных классов, но получить ошибку во время компиляции. Пожалуйста, ознакомьтесь с правилами, указанными ниже. ПРИМЕЧАНИЕ. Это не фактический код, а только часть фактического кода с измененными именами переменных и функций.Ошибка в вызове функции указатель

хиджры Файл

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 
} 

Я пытался вызвать указатели функций всеми возможными способами (я не знаю, ошибаются ли некоторые или все из них). Сообщение об ошибке, которое я получил во время компиляции, было помещено как комментарий перед этой строкой.

ответ

4

Вы не имеете дело с указателем на функцию, вы имеете дело с функцией-указателем-членом-funciton. Это совсем другие звери. Подумайте о последнем как «идентификатор функции внутри объекта». Вы должны использовать его с объектом, чтобы получить что-то вызываемое. Другими словами, это:

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

->* (и соответствующих .*) является оператором разыменования указателей на член.

+0

Большое спасибо. Это сработало. :) – sajal

Смежные вопросы