[問題] 函數指標的使用問題
我有一個類別 類別裡有幾個函數
請問在類別中如何用函數指標來呼叫該類別中的函數
如:
class A{
void run(){
cout<<"test";
}
void start(){
void (*f)(); //函數指標
f=run; //指標指向目標函數(這裡報錯1.)
f(); //使用函數指標執行函數
}
};
報錯1.argument of type `void (A::)()'
does not match `void (*)()'
如果將run()改成static的話是可以的
但這樣run()使用上就不方便(如需要更改動態成員變數)
如何解決這個問題呢?
--更新1--
目前解決方法是在類別外寫一個函數用Class A的指標來呼叫A的run():
void wraper(){
A *a;
a->run();
}
然後Class A 裡的f=run;改成f=wraper;
這樣就可以不改static也可以用該函數
問題就是 wraper()裡是重新宣告一個A的指標
所以執行的時候等於是重新執行一個新的A(變數都新的)而不是已經存在的A
--更新2--
暫時解決了 在wraper加入一個引數參數void* v
這個參數是要輸入一個類別指標 在這裡就是class A的指標
void wraper(void* v){
A *a=(A*)v; //宣告一個class A的指標並塞入v
a->run(); //用指標呼叫函數
}
然後A裡面的start()改:
void start(){
void (*f)(void*); //加入引數參數void*
A *a;
a=this; //將類別本身放入指標
f=wraper;
f(a); //執行wraper(a);
}
開發平台: (Dev-C++, Windows)
有更好的解決辦法嗎? 可以不用另外寫方法的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.37.104.132
→
04/09 18:15, , 1F
04/09 18:15, 1F
→
04/09 18:15, , 2F
04/09 18:15, 2F
→
04/09 18:15, , 3F
04/09 18:15, 3F
→
04/09 18:15, , 4F
04/09 18:15, 4F
改成這樣後報錯是:
1.`void (A::)()' does not match `void (A::*)()'
2.must use .* or ->* to call pointer-to-member function in `f (...)'
恩...有點接近卻不知道怎麼改才對
→
04/09 18:30, , 5F
04/09 18:30, 5F
推
04/09 18:51, , 6F
04/09 18:51, 6F
改成這樣後可以塞入 但執行f()結果有報錯2.
※ 編輯: QgameQ 來自: 114.37.104.132 (04/09 21:48)
推
04/09 21:55, , 7F
04/09 21:55, 7F
→
04/09 21:55, , 8F
04/09 21:55, 8F
→
04/09 21:55, , 9F
04/09 21:55, 9F
推
04/09 22:01, , 10F
04/09 22:01, 10F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
3
10
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章