我正在将下面看到的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)
{
答案 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;
}