サードパーティのSDK(Crystal Space)を使用しようとしていて、問題が発生しています。g ++は「仮想const ...オーバーロードできません」と苦情を言います
コード(ない鉱山)は次のようになります。
#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関数をオーバーロードできないのですか?
コードを投稿する必要があります*投稿*前処理。私たちの誰もそのようなコードを読むことはできません – Puppy