在Object Pascal中,我能否在类内定义类型?

5

这里是一个例子(目前无法工作):

type
    menu = class
        private
            menu_element = RECORD
                id: PtrUInt;
                desc: string;
            end;
        public
            procedure foo();
    end;
2个回答

5

是的,您可以。但是由于您想声明一个类型,您必须输入一个有效的类型表达式

type menu = class
  private
    type menu_element = RECORD
      id: PtrUInt;
      desc: string;
    end;
end;

该结构是Delphi 2006+或FPC 2.6+。 - Marco van de Voort
1
我假设OP使用FPC和objfpc方言。由于它是开源的,很少见到有人使用旧版本的编译器。但是确实可能是另一个编译器。 - Abstract type
如果您使用FPC,那么有一种更老、更直接的解决方案可供选择,请参考我的回答。 - Marco van de Voort

3

如果你将 "=" 改为 ":",Free Pascal 就会接受这个声明。":" 用于声明字段,"=" 用于声明类型。

{$mode Delphi}
type
    menu = class
        private
            menu_element : RECORD
                id: PtrUInt;
                desc: string;
            end;
        public
            procedure foo();
    end;

procedure menu.foo;
begin
end;


begin
end.

Turbo Pascal和Delphi(以及FPC 2.2之前的版本)禁止此操作。Free Pascal重新实现了这种旧的(经典Pascal)行为,因为苹果方言需要这样做。

Delphi不禁止嵌套类型(类、记录、枚举等): http://docwiki.embarcadero.com/RADStudio/Rio/zh/Nested_Type_Declarations - jep
那是不同的东西。那仍然是一个单独的类型声明(在类的范围内只是一个单独的块),而不是像示例所示的位置。比较这两个来源。 - Marco van de Voort
我要回答提出的问题(我假设你的回答是在回答这个问题),那就是在Object Pascal中可以在类内定义类型。你是在回答另一个问题还是我漏掉了什么? - jep
是的,你说得对,你回答了标题,而我则集中回答了代码。 - Marco van de Voort

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