2013-11-01 129 views
0

我正在試圖製作一個函數指針數組來緩解一些否則會是噩夢的代碼。我想使用一組函數,如下所示。函數指針指向非靜態函數

void drawNothing(Point2, Point2, Point2, Point2); 

我已經定義了函數指針的類型。

typedef void(*FunctionPointer)(Point2, Point2, Point2, Point2); 

和一個數組來存儲指針本身。

FunctionPointer drawMSCase[16]; 

的問題是,當我嘗試將功能分配給一個插槽,像這樣

drawMSCase[0] = &Grid::drawNothing; 

我收到以下錯誤

error: cannot convert 'void (Grid::*)(Point2, Point2, Point2, Point2)' to 'Grid::FunctionPointer {aka void (*)(Point2, Point2, Point2, Point2)}' in assignment 

它的工作原理,如果我定義功能是靜態的,但我不能這麼做,因爲它會對我的設計產生太大的影響。我該如何解決這個問題?

回答

0

我已經找到了答案,這要歸功於我們在右邊顯示的建議。

鑑於我想使用指向類Grid的成員函數的指針,我必須在typedef聲明中指定它。

typedef void(Grid::*FunctionPointer)(Point2, Point2, Point2, Point2); 

通知的網::這是前失蹤。

+3

這很棒。請記住,「表明課程」不僅僅是一種美容語法。這種指針是一種與普通函數指針完全不同的野獸。這兩者不可互換,也不兼容。希望你不需要他們。 – AnT

+0

你說得對。我編輯了答案,使其更具信息性。 – broncoAbierto