Невозможно переопределить TCollection.Notify: объявление уведомления отличается от предыдущего объявления
Примечание. Заголовок другого вопроса отличается, что не позволяет определить его как соответствующий.
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;
Подпись метода Notify была взята copy-paste, поэтому ошибок быть не могло;
ошибка
В разделе интерфейса:
[ошибка dcc32] MyUnit.pas(85): E2037 Объявление "Уведомить" отличается от предыдущего объявления
В разделе реализации:
[Ошибка dcc32] MyUnit.pas(475): E2008 Несовместимые типы
Вопрос
Что не так?
1 ответ
Решение
К сожалению, Delphi заявляет TCollectionNotification
дважды: один находится в System.Classes, а другой - в System.Generics.Collections.
Чтобы обойти эту проблему, переместите System.Generics.Collections до System.Classes в предложении использования или квалифицируйте его как System.Classes.TCollectionNotification
).