首页 文章

将Delphi Set命令转换为C Builder

提问于
浏览
0

我正在将下面看到的Delphi表达式转换为C Builder . 我的C Builder代码生成错误消息E2299 . 我在下面给出了这个错误描述的全文 . 您能否建议更改我的C代码以使其正常工作 .

//Delphi
TYPE
Regions   = (North,South,East,West);
RegionSet = SET OF Regions;
//C++Builder
enum Regions { North, South, East, West };
typedef Set<Regions, North, West> RegionSet;

E2299无法从“设置”生成模板专业化您需要在程序中添加属性 . 属性声明指定名称和类型,并包括至少一个访问说明符 . 属性声明的语法是:property propertyName [indexes]:type index integerConstant specifiers;其中:propertyName是任何有效标识符[indexes]是可选的,是由分号分隔的参数声明序列 . 每个参数声明的格式为identifier1,...,identifiern:type type必须是预定义或先前声明的类型标识符 . 也就是说,属性Num:0..9 ...等属性声明无效 . 索引integerConstant子句是可选的 . 说明符是一系列读,写,存储,默认(或nodefault),并实现说明符 . 每个属性声明必须至少有一个读或写说明符 .

编辑如下:

问题是下面看到的typedef无法在C Builder函数内编译 . 我在CheckRegion函数中设置了typedef .

void __fastcall TForm1::CheckRegion( bool visible ){ 
//C++Builder 
enum Regions { North, South, East, West }; 
typedef Set<Regions, North, West> RegionSet; 
}

解决方案是将typedef移动到TForm1 * Form1正下方的主窗体顶部;如下所示 .

//--------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// use "typedef" here
enum RegionsCpp {NorthCpp, SouthCpp, EastCpp, WestCpp };
typedef Set<RegionsCpp, NorthCpp, WestCpp> RegionSetCpp;
//--------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{

1 回答

  • 1

    您在错误的地方使用 typedef Set ... .

    如果您使用 NOT 本地 enum Regions ,则可以使用 typedef Set <...

    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClick(TObject *Sender)
    {
     enum Regions {North, South, East, West };
     // You can use "enum" here, but not "typedef Set <..."
     typedef Set<Regions, North, West> RegionSet;
     // next typedef is OK
     typedef int NumberOfParts;
    }
    

    Delphi你可以在这里使用TYPE而不会出现问题

    procedure TForm1.FormClick(Sender: TObject);
    TYPE
     Regions = (North, South, East, West );
     RegionSet = SET OF Regions;
    begin
     [...]
    end;
    

    C Builder跟随工作

    #include <vcl.h>
    #pragma hdrstop
    #include "Enum.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    enum Regions {North, South, East, West };
    // use "typedef" here
    typedef Set<Regions, North, West> RegionSet;
    // also works
    // typedef System::Set<Regions, North, West> RegionSet;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClick(TObject *Sender)
    {
      [...]
    }
    

    如果使用全局 enum Regions ,可以使用 typedef Set <...

    #include <vcl.h>
    [...]
    TForm1 *Form1;
    enum Regions {North, South, East, West };
    [...]
    //--------------------------------------------------------------
    void __fastcall TForm1::FormClick(TObject *Sender)
    {
     typedef Set<Regions, North, West> RegionSet;
    }
    

相关问题