将Delphi Set命令转换为C ++ Builder

时间:2015-07-27 15:08:39

标签: delphi c++builder

我正在将下面看到的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]:类型索引integerConstant说明符;

     

其中:

     

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 个答案:

答案 0 :(得分:1)

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

如果您使用 NOT 本地typedef Set <...

,则可以使用enum Regions
//---------------------------------------------------------------------------
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)
{
  [...]
}

如果您使用全局typedef Set <...

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