注意:other question的标题是不同的,这使得它无法识别为匹配的标题。
System.Classes
TCollection = class(TPersistent)
protected
procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;
end;MyUnit
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
Vcl.ExtCtrls, DB, System.Generics.Collections;
TTextDisplayLineInfos = class(TCollection)
protected
procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); override; //Here "[dcc32 Error] MyUnit.pas(85): E2037 Declaration of 'Notify' differs from previous declaration"
end;
implementation
procedure TTextDisplayLineInfos.Notify(Item: TCollectionItem;
Action: TCollectionNotification);
begin
inherited; //Here "[dcc32 Error] MyUnit.pas(475): E2008 Incompatible types"
//..............
end;通知方法的签名是通过复制粘贴完成的,因此不会出现任何错误;
误差
在接口部分:
dcc32 Error MyUnit.pas(85):“通知”的E2037声明与以前的声明不同
在执行部分:
dcc32 Error MyUnit.pas(475):E2008不兼容类型
问题
Whai错了吗?
发布于 2018-01-19 16:47:59
不幸的是,德尔福两次声明TCollectionNotification:一个位于System.Classes中,另一个位于System.Generics.Collections中。
要解决此问题,请在uses子句中将System.Generics.Collections移到System.Classes之前,或者将其限定为System.Classes.TCollectionNotification)。
https://stackoverflow.com/questions/48345167
复制相似问题