10

ネストされた型のスコープに、Delphi の派生クラスが含まれないのはなぜでしょうか。コードをよりきれいにすることができます:

type
  TBaseTest = class
  public type
    PVector = ^TVector;
    TVector = record
      A, B, R: Integer;
    end;
  public
    procedure Execute(var Vector: TVector); virtual; abstract;
  end;

  TTestA = class(TBaseTest)
  public
// E2003 Undeclared identifier: 'TVector'
    procedure Execute(var Vector: TVector); override;
// workaround:
//  procedure Execute(var Vector: TBaseTest.TVector); override;
  end;
4

1 に答える 1

0

私が間違っていなければ、TBaseTest で TVertor を記述すると、コンパイラは最初にこのクラスで、次にこのユニットで、次に Uses セクションのモジュールでそれを探します。そのため、単純な TVector、つまり TBaseTest.TVector を記述できます。

TBaseTest から派生したクラス TTestA を作成し、そこで TVector を使用すると、最初に TTestA (TVector がない)、次にこのモジュール (TVector もありません)、次に Uses が検索されます。TBaseTest の内部クラスを使用する場合は、TBaseTest.TVector を直接記述する必要があります。これは、TVector が TTestA ではなく TBaseTest で定義されているためです。

于 2013-01-08T19:52:05.643 に答える