条件编译方法的继承的问题!!倾家荡产求答案!! ( 积分: 50 )

  • 主题发起人 主题发起人 grabber
  • 开始时间 开始时间
G

grabber

Unregistered / Unconfirmed
GUEST, unregistred user!
通过下面代码我在TObject中加入纯虚方法:
TObject = class(System.TObject)
public
{$IFDEF DBC}
function Check: boolean;virtual;abstract;
{$ENDIF}
end;
然后在我想在子类中重写此方法:
TStack = class(TObject)
{$IFDEF DBC}
function Check:boolean;override;
{$ENDIF}
end;
编译时提示:Method "check"not found in base class....
这个方法我只想在定义了编译变量DBC时才编译,上面问题如何解决!?
在线等富翁高手!!
 
通过下面代码我在TObject中加入纯虚方法:
TObject = class(System.TObject)
public
{$IFDEF DBC}
function Check: boolean;virtual;abstract;
{$ENDIF}
end;
然后在我想在子类中重写此方法:
TStack = class(TObject)
{$IFDEF DBC}
function Check:boolean;override;
{$ENDIF}
end;
编译时提示:Method "check"not found in base class....
这个方法我只想在定义了编译变量DBC时才编译,上面问题如何解决!?
在线等富翁高手!!
 
天。。。高手们都睡了吗!?沙发偶自己坐了。。。郁闷ing。。。[:(]
 
难道没有高手嘛?!如果解决问题我再加100!!!
——有点小气,但我只有这么多了!:(
 
{$DEFINE DBC}
TObject = class(System.TObject)
public
{$IFDEF DBC}
function Check: boolean;virtual;abstract;
{$ENDIF}
end;

TStack = class(TObject)
{$IFDEF DBC}
function Check:boolean;override;
{$ENDIF}
end;
===============
TObject = class(System.TObject)
public
{$IFDEF DBC}
function Check: boolean;virtual;abstract;
{$ENDIF}
end;

TStack = class(TObject)
{$IFDEF DBC}
function Check:boolean;override;
{$ENDIF}
end;
==========
以上两段,我都编译通过!
 
如果你的子类 TStack 与你自定义的TObject不在同一个单元,则应该这样声明:
TStack = class(YourOnUnit.TObject)
{$IFDEF DBC}
function Check:boolean;override;
{$ENDIF}
end;
否则,这里的TObject会被系统认为是system.TObject
 
张鸿林 大哥好,
谢谢你的回答。。。
我试过了,编译还是不通过,始终是:Method "check"not found in base class
你用的是delphi的什么版本?!或者是不是编译选项需要特殊的设置?!
 
哦,再问问高手们吧,Delphi对于条件编译选项之间的代码好象是不进行错误检查的,有什么办法能让IDE强制进行错误检查?!(除了解释掉条件编译符号这样的方法。。。)
 
Delphi对于条件编译选项之间的代码好象是不进行错误检查的,?????? 谁说的?

我不知道你怎么回事,根本就没有问题呀,我测试通过。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;

type
{$DEFINE DBC}

TObject = class(System.TObject)
public
{$IFDEF DBC}
function Check: boolean;virtual;abstract;
{$ENDIF}
end;

TStack = class(TObject)
{$IFDEF DBC}
function Check:boolean
override;
{$ENDIF}
end;


TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1KeyDown(Sender: TObject
var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1KeyDown(Sender: TObject
var Key: Word;
Shift: TShiftState);
begin
if (stringgrid1.Row=StringGrid1.RowCount-1) and (key=VK_DOWN) then
StringGrid1.RowCount:=StringGrid1.RowCount+1;
end;


{ TStack }

function TStack.Check: boolean;
begin
beep;
end;

end.
 
天啊。。。这是为什么啊?!为什么一样的代码我的就通不过呢?![:(][:(][:(][:(]
 
xuxiaohan,你能不能给我一个email啊?!我把代码发给你,你帮我看看好么!?
 
问题已经解决:
我原来程序通不过编译的原因:我把TObject和TStack放在两个不同的单元里,一个单元打开了编译开关,一个没有,所以通不过!
我后来测试的代码放在一个单元里同样通不过编译的原因:TObject应该放在TForm1定义的前面!!
好了,问题解决了,结帖,穷了,分就只能撒这么多了,呵呵。。。
谢谢各位的回答!!;)
 

Similar threads

后退
顶部