サードパーティのSDK(Crystal Space)を使用しようとしていますが、いくつかの問題が発生しています。
コード(私のものではない)は次のようになります:
#define CS_EVENTHANDLER_PHASE_LOGIC(x)
CS_EVENTHANDLER_NAMES(x)
CS_EVENTHANDLER_DEFAULT_INSTANCE_CONSTRAINTS
virtual const csHandlerID * GenericPrec
(csRef<iEventHandlerRegistry> &, csRef<iEventNameRegistry> &,
csEventID) const {
return 0;
}
virtual const csHandlerID * GenericSucc
(csRef<iEventHandlerRegistry> &r1, csRef<iEventNameRegistry> &r2,
csEventID event) const {
static csHandlerID succConstraint[6];
if (event != csevFrame(r2))
return 0;
succConstraint[0] = FrameSignpost_Logic3D::StaticID(r1);
succConstraint[1] = FrameSignpost_3D2D::StaticID(r1);
succConstraint[2] = FrameSignpost_2DConsole::StaticID(r1);
succConstraint[3] = FrameSignpost_ConsoleDebug::StaticID(r1);
succConstraint[4] = FrameSignpost_DebugFrame::StaticID(r1);
succConstraint[5] = CS_HANDLERLIST_END;
return succConstraint;
}
#define CS_EVENTHANDLER_PHASE_3D(x)
CS_EVENTHANDLER_NAMES(x)
CS_EVENTHANDLER_DEFAULT_INSTANCE_CONSTRAINTS
virtual const csHandlerID * GenericPrec
(csRef<iEventHandlerRegistry> &r1, csRef<iEventNameRegistry> &r2,
csEventID event) const {
static csHandlerID precConstraint[2];
if (event != csevFrame(r2))
return 0;
precConstraint[0] = FrameSignpost_Logic3D::StaticID(r1);
precConstraint[1] = CS_HANDLERLIST_END;
return precConstraint;
}
virtual const csHandlerID * GenericSucc
(csRef<iEventHandlerRegistry> &r1, csRef<iEventNameRegistry> &r2,
csEventID event) const {
static csHandlerID succConstraint[5];
if (event != csevFrame(r2))
return 0;
succConstraint[0] = FrameSignpost_3D2D::StaticID(r1);
succConstraint[1] = FrameSignpost_2DConsole::StaticID(r1);
succConstraint[2] = FrameSignpost_ConsoleDebug::StaticID(r1);
succConstraint[3] = FrameSignpost_DebugFrame::StaticID(r1);
succConstraint[4] = CS_HANDLERLIST_END;
return succConstraint;
}
(同じ関数名を持つこれらのようなブロックがさらにいくつかあります)
ご覧のとおり、これらは仮想cosnt関数をオーバーロードしています。
私がコードを持っているとき
CS_EVENTHANDLER_PHASE_LOGIC("application.cstest")
ヘッダーファイルで、次のエラーが発生します。
error: 'virtual const csEventHandlerID* CSTest::GenericSucc(...) const cannot be overloaded'
これは、GenericPrec、InstaceSucc、およびInstancePrecに対して繰り返されます。
このエラーに関するGoogleの情報を見つけることができませんでした。仮想定数がオーバーロードできないことを示すものは何もないようです(そして開発者はそう考えているようです)ので、コンパイラの問題は何ですか?
tl; dr:
仮想const関数をオーバーロードできないのはなぜですか?