为什么我的Delphi不接受私有声明下的任何内容?

3
我是一名学生,Delphi并不是我主要的编程环境。我知道它的工作原理,并且完全熟悉它的布局。最近我收到了一个任务,需要使用数组通过整数和字符串将它们列在listbox中。这个想法非常简单,程序本身也很容易制作。
问题出现在当我尝试在private或public下声明一个常量时,它只显示一个错误消息,指出“'END' expected but 'CONST' found”。我已经使用公共和私有变量和常量工作了一段时间,但我真的不确定发生了什么。
代码如下:
type
  TForm1 = class(TForm)
    edtDateTime: TEdit;
    lstListArrayValues: TListBox;
    gbpIntegerArrayOptions: TGroupBox;
    gbpStringArrayOptions: TGroupBox;
    gbpListBoxOptions: TGroupBox;
    btnInitializeIntArray: TButton;
    btnAssignIntArray: TButton;
    btnDoubleIntArray: TButton;
    btnInitializeStrArray: TButton;
    btnAssignStrArray: TButton;
    btnCapitalStrArray: TButton;
    btnDisplayArray: TButton;
    btnClearListbox: TButton;
    btnDeleteSelected: TButton;
    XPManifest1: TXPManifest;
    procedure FormCreate(Sender: TObject);
    procedure btnInitializeIntArrayClick(Sender: TObject);

    private
    {Private Declarations}
      Const
        nItems = 5;
      var
        nBasicsIntArray : array [0..(nItems - 1)] of integer;
        nBasicsStrArray : array [0..(nItems - 1)] of string;
    public
      { Public declarations }
  end;

当我运行应用程序时,它显示“'END' 期望但找到了 'CONST'”。我正在使用Windows 7和Delphi 7,之前没有遇到过这个问题。
说实话,可能是我忽略了一些愚蠢的东西,但我已经检查了一切,似乎找不到问题的原因。

3
Delphi 7 不允许使用类常量,这个功能是后来引入的。 - undefined
请参阅Delphi编程中的枚举 vs 常量 vs 类常量。看起来类常量是在D2005甚至.NET D8中引入的。 - undefined
更正一下,BDS2006中的功能矩阵上写着“Delphi Win32的新特性!类变量/类静态数据”。 - undefined
2个回答

11

在Delphi 7中不支持在类内部声明常量,该语言特性是在后续版本中添加的。

请在类外声明常量。

同样适用于您对var的使用。这种语法在Delphi 7中不受支持。你应该从类声明中简单地删除var关键字。


3
此外,在 Delphi 7 中,var 关键字也不适用于类声明,因为没有支持 class var - undefined
@Ken 这不是一个类变量,而是一个实例变量。我不确定它在d7中是否有效。需要检查一下。 - undefined
1
@David:不,Delphi 7中没有。在类声明中没有varconst或者type。这些是在Delphi 8中为.NET编译器添加的,然后在Delphi 2005和2006中为本地编译器添加的。 - undefined
@RudyVelthuis 谢谢。我在尝试的时候意识到了这一点。 - undefined
@David:我无法尝试,即使我想要。没有安装Delphi 7了。最低版本是2007(用于我的Delphi for .NET项目),否则只有XE系列的版本。 - undefined

1

如上所述,解决方案是将您的本地常量移动到Delphi 7下的全局位置。 以下是一个示例代码:

Const
    nItems = 5;
type
  TForm1 = class(TForm)
    edtDateTime: TEdit;
//...
  private
      nBasicsIntArray : array [0..(nItems - 1)] of integer;
      nBasicsStrArray : array [0..(nItems - 1)] of string;
//...
  end;

此外,您可以多次使用“const”和“type”关键字以保持相关性。

1
我看不出你的答案与被接受的解决方案有何不同。 - undefined
@nil:你说得对,我只是想添加一个简化的代码示例,并给出关键字多次使用的提示。已相应地进行了编辑。 - undefined

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