Delphi XE2 - 嵌套类函数无法编译

4

我正在将一些遗留的第三方组件从Delphi 6源代码升级到XE2。

第三方源代码中有一个类程序中嵌套了一个类函数。以下是一个无法正常工作的示例:

type
  TMyClass1 = class
  public
    class procedure DoSomething;
  end;

{ TMyClass1 }

class procedure TMyClass1.DoSomething;
  class function DoSomethingelse: boolean;
  begin
    result := false;
  end;
begin

end;

尝试编译此代码会报错,提示doSomethingelse是未声明的标识符。我可以将嵌套函数提取到同一层级来解决这个问题,但是否有编译器选项可以设置以防止出现此类情况呢?这是最近改变的事情吗?还有其他人遇到过这个问题吗?谢谢。

也许嵌套函数不应该紧挨着“class”关键字。如果你想将它提取出来,就用“class”关键字将其提取到私有部分。 - Kromster
我的代码库中的一些第三方代码在我迁移到XE2时遇到了这个问题。最好的解决方案是移除内部的类。我敢打赌这个变化是在XE2中发生的,而上面的代码适用于所有早期版本。 - David Heffernan
@DavidHeffernan 这段代码在 Delphi XE 中也失败了,所以更改是在 Delphi 2007 和 XE 之间的某个版本中进行的。 - RRUZ
@RRUZ 我在从2010迁移到XE2时遇到了这个问题,所以我猜那时是XE版本。我认为是XE2,因为那里发生了更大的变动。 - David Heffernan
1个回答

6
为了在XE2中编译您的代码,只需删除DoSomethingelse定义中的class关键字,即使这段代码在旧版本的Delphi中编译(我在Delphi 5、7和2007中测试过),我也看不出声明一个嵌入式(内部)过程或函数时使用class关键字的意义或区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接