PDA

View Full Version : cần giúp về function pointer



Xmen
17-11-2004, 12:24
chào các bác, nhờ giúp đỡ vấn đề sau:
Trong CMyClass, tui có các hàm như khai báo sau:
Void Func1 (int, int);
Void Func2(int, int);

Trong một hàm khác (SomeFunc() , cũng thuộc CMyClass) , tui làm như sau:
Void CMyClass:: SomeFunc()
{
Void (* funcPointer ) (int, int);

If ( đ k)
funcPointer = Func1;
else
funcPointer= Func2;
……………
……………
}

Thì bị thông báo lỗi:
error C2440: '=' : cannot convert from 'void (__thiscall CMyClass::*)( int,int)' to 'void__cdecl *)(,int,int)'

Tui thử thay bằng:
funcPointer = CMyClass::Func1 ;
cũng bị thông báo lỗi tương tự.

Bác nào có cao kiến, xin chỉ giáo, cảm ơn.

Mong các thầy chỉ giúp, em cảm ơn.

bete
17-11-2004, 13:04
Xmen thử đổi cái khai báo lại là:

void (CMyClass::*funcPointer ) (int, int);

coi sao !?

-thân

thailehuy
17-11-2004, 15:36
Hì hì, theo tui thấy thì bác sửa để gán funcPointer vào pointer đi, ví dụ &Func1, chứ làm sao gán pointer vào function thông thường được

Xmen
19-11-2004, 23:06
tui làm theo sách C++21Days thấy nó gán trực tiếp như vậy, và chạy trong DOS, hàm độc lập, kô phải là method.
Còn trong VC thì tui đã giải quyết đựơc rồi, đúng như bác nói , phải gán & Func1 mới được, chẳng hiểu tại sao.

okidachi
21-11-2004, 21:04
Xin chào XMen,

Câu hỏi của bác là thuộc về method pointer rồi, không còn là function pointer nữa. Để khai báo chính xác cho method pointer thì có hơi khác 1 tí so với function pointer.

Để khai báo 1 method pointer (ví dụ cho trường hợp của bạn)
void (CMyClass::*funcPointer)(int, int);

Để gán 1 method pointer
funcPointer = &CMyClass::func1;

** Lưu ý là có dấu '&' cho việc gán 1 method pointer nhưng đối với function pointer thì không ... ví dụ như sau :
void (*myfunc)(int, int);

Khi gán cho 1 function (không phải là 1 method trong một class),
myfunc = funcA;
....