2012-08-21 7 views
0

Я пытаюсь передать функцию как параметр другой функции.переносить функцию как параметр на другую функцию

по какой-либо причине он не работает.

//myClass.h 
class MyClass 
{ 
public: 

typedef int (*MyClass::ptrToMember)(float, char); 

    ptrToMember p1; 
    MyClass::MyClass(); 
    void hello(ptrToMember fun); 

    int SendIt (float a, char b); 

}; 



//MyClass.cpp 
MyClass::MyClass(){ 
    p1 = &(MyClass::SendIt); 
    hello(p1); 

} 
int MyClass::SendIt (float a, char b) 
{ 
    std::cout << "MyClass::SendIt "<<a<<std::endl; 

    return 1; 
} 

void MyClass::hello(ptrToMember fun){ 

int result = (*fun)(12, 'a'); 
    std::cout << result << std::endl; 
} 

будет признателен, если кто-то скажет мне, что моя ошибка.

+1

Определение ** не работает **. –

+3

Вы вводите в заблуждение функции и функции-члены. –

+0

проблема с этой строкой: p1 = & (MyClass :: SendIt); – bachurim09

ответ

3
typedef int (*MyClass::ptrToMember)(float, char); 
      ^
// your mistake is here 

указатели на функции-члены класса объявлены как это:

typedef int (MyClass::*ptrToMember)(float, char); 
        ^

И называется так (тест экземпляр класса - также может быть «это):

(test.*pointer)(parameters) // if test is automatically allocated 

или

(test->*pointer)(parameters) // if test is a pointer 

Оператор decleration является ::*, в то время как оператор для вызова указатель на функцию члена являются .* и ->*.

Edit:

Эта линия:

p1 = &(MyClass::SendIt); 

на самом деле должно быть:

p1 = &MyClass::SendIt; // without parentheses 
+0

спасибо .. я все еще получаю сообщение об ошибке (Error ошибка C2276: '&': недопустимая операция на выражение функции связанного члена \t C: \ CPP \ functionpointer \ a.cpp) на линии p1 = & (MyClass :: SendIt); – bachurim09

+0

Обновлено, кстати, какой компилятор вы используете? – xQuare

1

Скажем так:

typedef int (MyClass::*ptrToMember)(float, char); 

// ... 

int result = (this->*fun)(12, 'a'); 
Смежные вопросы