良い例を次に示します。OpenGLをオーバーロードしてglutMouseFunc
、選択した名前空間とクラス関数を受け入れられるようにしようとしています。特に1つはInit::DisplayInit::mouse
、静的なです。問題は、これは可能ですか?もしそうなら、これはどのように達成されますか?
私の実装
void glutMouseFunc(void (Init::DisplayInit::*mouse)(int, int, int, int)) {
(*mouse);
}
実装によるエラー
..\OpenGL_03\/displayinit.h:27: error: variable or field 'glutMouseFunc' declared void
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: void value not ignored as it ought to be
関数の宣言を同じファイルのヘッダーファイルに入れていることに注意してください。また、宣言と関数の定義の両方が名前空間宣言の外側にあることを確認しました(両方のファイルのほとんどをそれぞれラップします)。示されているように、最初のエラーの1つは、関数を変数またはフィールド(???)として読み取ります。