最近、キーワード「virtual」と「override」を追加することを忘れたとき、誤って同じ名前を使用したときにコンパイラの警告が表示されるプロシージャ私は誰もいなくなったので、今なぜ私は理解していない。ベースメンバーやメソッドを隠すための警告を得るには、私は何をする必要がありますか? (間違いなく正しいジムMcKeethによる)this answerによるコンパイラがメンバ変数やプロシージャを隠しているときに警告を出さない
:
あなたは、あなたがいることを隠している上位クラスのメソッドと同じ名前を持つ子孫クラスのメソッドを宣言した場合ancestor method - その子孫クラスのインスタンス(そのクラスとして参照されている)がある場合、祖先の動作を取得しません。コンパイラは警告を出します。私は、Delphi XEを使用しています
unit Unit1; interface {$WARNINGS ON} {$WARN HIDING_MEMBER ON} {$WARN HIDDEN_VIRTUAL ON} // I understand the two lines above are superfluous. // I put them there to demonstrate that I have tried to enable these // warnings explicitly. type TBase = class public SomeMember: integer; procedure Foo; end; type TDerived = class (TBase) public SomeMember: integer; procedure Foo; end; implementation { TBase } procedure TBase.Foo; begin end; { TDerived } procedure TDerived.Foo; begin end; end.
と私のコンパイラは、すべてが大丈夫ですと言う:
しかし、驚いたことに、このコードは、私に警告を与えるものではありません
プロジェクトの依存関係を確認します。 .. ビルドProject1.dproj(Debug、Win32) "Project1.dpr"のdccコマンドライン c:\ program files \ embarcadero \ radスタジオ\ 8.0 \ bin \ dcc32.exe - $ O- - $ W + - $ YD --no-config -B -Q -AWinTypes =風ows; WinProcs = Windows; DbiTypes = BDE; DbiProcs = BDE; DbiErrs = BDE -DDEBUG -E "C:\コンパイラ出力" -I "c:\ program files \ embarcadero \ radスタジオ\ 8.0 \ lib \ Win32 \ debug"; "c:\ program ファイル\デバッグ ";" c:\ program files \ embarcadero \ rad スタジオ\ 8.0 \ Imports " C:¥Program Files¥embarcadero¥rad studio¥8.0¥include ";" C:¥Program ファイル¥Raize¥CS4¥Lib¥¥C:¥Users¥Public¥Documents¥RAD Studio¥8.0¥Dcp " C:\ program files \ embarcadero \ rad スタジオ\ 8.0 \ RaveReports \ Lib "-LE" C:\ program files \ embarcadero \ radスタジオ\ 8.0 \ lib \ win32 \ \ Program Files \ embarcadero \ radスタジオ\ 8.0 \ bin \ Dcp " -N0" C:\コンパイラの出力\ DCU "-O" c :\ program files \ embarcadero \ radスタジオ\ 8.0 \インポート ";" C:\ Users \ Public \ Documents \ RAD Studio \ 8.0 \ Dcp "; "C:\プログラム ファイル\エンバカデロの\ RAD Studioの\ 8.0 \には、"; "C:\プログラムファイル\ Raize \ CS4 \ Libの\のRS-XE"; "C:\プログラムファイル\エンバカデロ\ラドスタジオ\ 8.0 \をlib \ win32 \ release "; "C:¥Program Files¥embarcadero¥rad studio¥8.0¥RaveReports¥Lib" -R "c:¥program files¥embarcadero¥rad studio¥8.0¥Imports"; "C:¥Users¥Public¥Documents¥RAD C:\ Program Files \ lib \ RS-XE "、" c:\ program files \ embricadero \ ¥¥lib¥win32¥release ";" c:¥program files¥embarcadero¥rad studio¥8.0¥RaveReports¥Lib "-U" c:¥program files¥embarcadero¥rad スタジオ\ 8.0 \ lib C:\ program files \ embarcadero \ rad スタジオ\ 8.0 \ lib \ win32 \ debug ";" c:\ program files \ embarcadero \ radスタジオ\ 8.0 \ RaveReports \ Lib " \ program files \ embarcadero \ radスタジオ\ 8.0 \ Imports ";" C:\ Users \ Public \ Documents \ RAD Studio \ 8.0 \ Dcp ";" c:\ program ファイル\ embarcadero \ radスタジオ\ 8.0 \ include "; "C:\ Program Files \ Raize \ CS4 \ Lib \ RS-XE"; "c:\ program files \ embarcadero \ rad st udio \ 8.0 \ lib \ win32 \ release "; "C:\プログラムファイル\ 8.0 \ RaveReports \エンバカデロの\ RAD StudioはLibの\" -K00400000 -NB "C:\プログラムファイルを\ 8.0 \ binに\エンバカデロ\ラドスタジオDCP \" -NH "C:\ Users \ユーザーRAD Studioの\ 8.0 \ HPPを\公共\ドキュメント」-NO "C:DCU" Project1.dpr 成功 経過時間\ \コンパイラの出力00:00:00。私の推測では、私はジムMcKeethことによって、前述の引用を誤解したり、私は(私は同じ結果、途中で一つの他のコンピュータ上でそれをテストしました)を認識していないよ、私のコンパイラでは、いくつかの設定を持っているのどちらかということである2
。どんな助けでも大歓迎です。
参照された答えは間違っていました。その質問に対するいくつかの他の答えも間違っていました。私はその答えに間違いを修正しました。 –