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是在TBaseTest中定义的,而不是在TTestA中。

于 2013-01-08T19:52:05.643 回答