- 締切済み
【delphi】クラスの継承、互換性について
//Base.pas TSituation = class(TObject) public procedure Update;virtual;abstract; procedure Reflect;virtual;abstract; end; //Title.pas TSceneTitle = class(TSituation) private ・ ・ ・ public constructor Create; destructor Destroy;override; procedure Update;override; procedure Reflect;override; end; //main.pas(メインフォーム) unit main; interface uses ・・・, Base, Title; ・ ・ ・ var fm_main: Tfm_main; Situation: TSituation; --------------------------------------------------- こう、きちんとクラスの宣言も継承もしているのに、(しているはず Situation := TSceneTitle.Create; とすると互換性がないといってコンパイルエラーになります。 なにかおかしいところがあるのでしょうか。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- SHIMAPEE
- ベストアンサー率75% (154/203)
簡単のため下のコードのように一つのunitで試したところ、コンパイル、実行できました。unitの参照の問題かもしれません。 Windows XP Pro SP3 + Delphi7 Pro 及び Vista Ultimate SP1 + Delphi2009 Proで試しました。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private public end; //Base.pas TSituation = class(TObject) public procedure Update;virtual;abstract; procedure Reflect;virtual;abstract; end; //Title.pas TSceneTitle = class(TSituation) private public constructor Create; destructor Destroy;override; procedure Update;override; procedure Reflect;override; end; var Form1: TForm1; Situation: TSituation; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Situation := TSceneTitle.Create; end; Constructor TSceneTitle.Create; begin ShowMessage('TSceneTitle.Create'); end; destructor TSceneTitle.Destroy; begin end; procedure TSceneTitle.Update; begin end; procedure TSceneTitle.Reflect; begin end; end.
お礼
自己解決しました。 わざわざテストまでして頂いてありがとうございました。 最初にBace.pasをつくり、途中でスペルにきづいてBase.pasに 変更した際、Bace.dcuが残ったままだったようです。
補足
書き忘れましたが、Delphi6Personal使用です。 >一つのunitで それなりの大きさのゲームに挑戦中なので、 ちょっと無理が・・・^^; コード補完機能はちゃんと働くし、(←画像)http://imagepot.net/view/123087053878.jpg コンパイルエラーにも出ないのでユニットの循環参照なんかは 起こってないかと思いますが・・・