0

関数ポインターの配列を作成して、悪夢のようなコードを軽減しようとしています。次のような一連の関数を使用したいと思います。

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

関数ポインターの型を定義しました。

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

そして、ポインター自体を格納する配列。

FunctionPointer drawMSCase[16];

問題は、スロットの 1 つに関数を割り当てようとすると、次のようになることです。

drawMSCase[0] = &Grid::drawNothing;

次のエラーが表示されます

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

関数を静的として定義すると機能しますが、設計に大きな影響を与えるため、実際にはできません。どうすればこれを解決できますか?

4

1 に答える 1

0

SOが右側に示す提案のおかげで、答えが見つかりました。

クラス Grid のメンバー関数へのポインターを使用したかったので、typedef 宣言でそれを指定する必要がありました。

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

以前は欠落していたGrid::に注意してください。

于 2013-11-01T14:28:59.810 に答える