我正在使用C++的Pacman遊戲,但遇到了成員函數指針的問題。我有2個類,pacman
和ghost
,這兩個類都從Mouvement
繼承。在子類中,我需要將函數傳遞給Mouvement
中的函數。但是,我不能簡單地擁有靜態函數,因爲那樣我就需要靜態變量,這是行不通的。通過成員函數指向父類
我試圖傳遞&this->movingUp
其中引發錯誤「不能創建一個非恆定的成員函數指針」
我試圖傳遞&<ghost or pacman>::movingUp
它引發錯誤「不能初始化類型的參數「無效() (INT)」類型的右值‘無效(::)(INT)’「
這裏是什麼培訓相關:(我切出大部分,這樣你只能看到這個問題有什麼必要)
class cMouvement {
protected:
int curDirection = -3; // Variables that are used in the 'movingUp, etc' functions.
int newDirection = -3; // And therefore can't be static
public:
void checkIntersection(void (*function)(int), bool shouldDebug){
// Whole bunch of 'If's that call the passed function with different arguments
}
然後是類pacman
和ghost
,在這一點上非常相似。
class pacman : public cMouvement {
void movingUp(int type){
// Blah blah blah
}
// movingDown, movingLeft, movingRight... (Removed for the reader's sake)
public:
/*Constructor function*/
void move(bool shouldDebug){
if (curDirection == 0) {checkIntersection(&movingUp, false);}
else if (curDirection == 1) {checkIntersection(&movingRight, false);}
else if (curDirection == 2) {checkIntersection(&movingDown, false);}
else if (curDirection == 3) {checkIntersection(&movingLeft, false);}
}
};
這很好,謝謝。 –