gpt4 book ai didi

delphi - 我无法使用接口(interface)编译类

转载 作者:行者123 更新时间:2023-12-03 15:17:46 24 4
gpt4 key购买 nike

我正在尝试创建一个实现接口(interface)的类,但出现以下错误:

[dcc32 Error] dl_tPA_MailJournal.pas(10): E2291 Missing implementation of interface method IInterface.QueryInterface
[dcc32 Error] dl_tPA_MailJournal.pas(10): E2291 Missing implementation of interface method IInterface._AddRef
[dcc32 Error] dl_tPA_MailJournal.pas(10): E2291 Missing implementation of interface method IInterface._Release
[dcc32 Fatal Error] MainUnit.pas(8): F2063 Could not compile used unit 'dl_tPA_MailJournal.pas'

代码是:

unit dl_tPA_MailJournal;

interface

uses
Windows,
Generics.Collections,
SysUtils,
uInterfaces;

type
TtPA_MailJournal = class(TObject, ITable)
public
function GetanQId: integer;
procedure SetanQId(const Value: integer);
function GetadDate: TDateTime;
procedure SetadDate(const Value: TDateTime);

function toList: TList<string>;

constructor Create(aId : Integer; aDate : TDateTime);

private
property anQId : integer read GetanQId write SetanQId;
property adDate : TDateTime read GetadDate write SetadDate;
end;

implementation

{ TtPA_MailJournal }

constructor TtPA_MailJournal.Create(aId : Integer; aDate : TDateTime);
begin
SetanQId(aId);
SetadDate(aDate);
end;

function TtPA_MailJournal.GetadDate: TDateTime;
begin
Result := adDate;
end;

function TtPA_MailJournal.GetanQId: integer;
begin
Result := anQId ;
end;

procedure TtPA_MailJournal.SetadDate(const Value: TDateTime);
begin
adDate := Value;
end;

procedure TtPA_MailJournal.SetanQId(const Value: integer);
begin
anQId := Value;
end;

function TtPA_MailJournal.toList: TList<string>;
var
aListTable: TList<TtPA_MailJournal>;
aTable: TtPA_MailJournal;
aListString: TList<String>;
begin
aTable.Create(1,now);
aListTable.Add(aTable);
aTable.Create(2,now);
aListTable.Add(aTable);
aListString.Add(aListTable.ToString);

Result := aListString;
end;

end.

界面是:

unit uInterfaces;

interface

uses
Generics.Collections;

type
ITable = Interface
['{6CED8DCE-9CC7-491F-8D93-996BE8E4D388}']
function toList: TList<string>;
end;

implementation

end.

最佳答案

问题是您使用 TObject 作为类的父类。您应该使用 TInterfacedObject反而。

在 Delphi 中,每个接口(interface)都继承自 IInterface,因此至少具有以下 3 methods :

您必须实现这 3 个方法,可以自己实现,也可以从包含这些方法的基础对象继承。

因为您继承自 TObject,但没有实现这 3 个方法,所以会出现编译错误。如果您阅读编译器错误,您会发现它实际上为您说明了这一遗漏。

TInterfacedObject已经为您实现了这些方法。
实现 IInterface (aka IUnknown) 的其他基础对象是:TAggregatedObjectTContainedObject 。然而,这些都是特殊用途的工具,只有在您真正知道自己在做什么的情况下才能使用。

将类的定义更改为

TTPA_MailJournal = class(TInterfacedObject, ITable)

你的代码将会编译。

参见Delphi basics了解更多信息。

关于delphi - 我无法使用接口(interface)编译类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32026236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com