Winndows8.1 + Delphi7, Delphi XE6
どうかご教授願います。
Unit1からUnit2の仮想メソッドを呼び出しているのですが、コンパイルは通りますが、実行時に EAccessViolationが発生してしまいます。
仮想メソッドを通常のメソッドにすると実行時エラーは出ません。
どこがおかしいのでしょうか?
よろしくお願いします。
----Unit1.pas-----------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
//Unit2;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
//FT2: T2Child;
end;
var
Form1: TForm1;
implementation
uses
Unit2;
var
FT2: T2Child;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage(FT2.GetF);
end;
end.
----Unit2.pas-----------------------------------------------------------------------
unit Unit2;
interface
type
T2 = class
protected
function GetF: string; virtual; abstract;
end;
type
T2Child = class(T2)
public
function GetF: string; override;
end;
implementation
{ T2 }
function T2Child.GetF: string;
begin
Result := 'T2Child !!!';
end;
end.
FT2に格納されるT2ChildがどこでもCreateされてないようですが。
ShowMessageするまえにCreateしたら大丈夫なんじゃないでしょうか
ちなみに、
FT2 := T2Child.Create;
は?
auさん、igyさん返信ありがとうございます。
Createしていませんでした。
Createしたら問題なく動作しました。
ありがとうございます。
ありがとうございました。
ツイート | ![]() |