2

注:他の質問のタイトルは異なるため、一致するものとして識別できません。

System.Classes

TCollection = class(TPersistent)
protected
  procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;
end;

マイユニット

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 メソッドの署名はコピペでとったものなので、エラーになることはありません。

エラー

インターフェイス セクション:

[dcc32 エラー] MyUnit.pas(85): E2037 「通知」の宣言が以前の宣言と異なります

実装セクション:

[dcc32 エラー] MyUnit.pas(475): E2008 互換性のない型

質問

間違ってる?

4

1 に答える 1

10

残念ながら、DelphiTCollectionNotificationは 2 回宣言しています。1 つはSystem.Classesにあり、もう 1 つはSystem.Generics.Collectionsにあります。

この問題を回避するには、uses 句でSystem.Generics.CollectionsをSystem.Classesの前に移動するか、または として修飾しますSystem.Classes.TCollectionNotification)。

于 2018-01-19T16:47:59.323 に答える