作者kkroy (大豬小豬肉一斤)
看板C_and_CPP
標題[問題] 求助 class 內的function pointer用法
時間Wed Sep 2 22:18:54 2009
在某一個class內宣告四個public的member function像降:
class A{
.......
public:
void Do(void);
void foo(int a, int b, int c,
void (*f1)(int,int,int), void (*f2)(int,int,int) );
void aaa(int, int, int);
void bbb(int, int, int);
}
void A::foo(int a, int b, int c,
void (*f1)(int,int,int), void (*f2)(int,int,int) ){
...........
(*f1)(a,b,c);
(*f2)(a,b,c);
}
其中,aaa, bbb 已經寫好,此略。
void A::Do(void){
............
int a = 1, b = 2, c = 3;
foo(a, b, c, aaa, bbb);
}
最後,我在main裡面執行,compiler不給我過。
void main(){
A TEST;
TEST.Do();
}
顯示如下:
error C3867: 'A::aaa': 函式呼叫遺漏引數清單,請用 '&A::aaa' 建立成員的指標
error C3867: 'A::bbb': 函式呼叫遺漏引數清單,請用 '&A::bbb' 建立成員的指標
之後,我在Do()內呼叫foo時,
parameters加上&A::aaa、&A::bbb
compiler還是不給過,請各位高手指點一下,
到底哪邊出了問題,謝謝!
p.s. 補充一下喔,如果我把Do()定義中,呼叫foo()的動作拿掉,
Compiler會過。所以我猜是不是我在DO()裡面呼叫foo()時,
有什麼動作做錯?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.144.17
※ 編輯: kkroy 來自: 140.113.144.17 (09/02 22:19)
推 dendrobium:f1(a,b,c); f2(a,b,c); 09/02 22:39
→ kkroy:樓上...還是一樣compiler不給過 09/02 22:43
→ Cloud:如果你宣告為static,那就可以用一般的函式指標表示 09/02 22:48
→ kkroy:樓上...這樣好像也不行呢! 09/02 22:52
→ kkroy:因為其實文中的foo(), aaa(), bbb()其實會用到A其他 09/02 22:53
→ kkroy:public裡面的member function,只是文中沒寫出來。 09/02 22:53
※ 編輯: kkroy 來自: 140.113.144.17 (09/02 23:00)
→ Cloud:這樣就無法宣告為static,乖乖的把一樓的文章看過吧 09/02 22:59
→ dendrobium:把aaa和bbb改成friend 09/02 23:01
→ kkroy:回樓上,1F的看完了,不過對於我的問題似乎沒有幫助... 09/02 23:02