我正在将下面看到的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 回答
您在错误的地方使用
typedef Set ...
.如果您使用 NOT 本地
enum Regions
,则可以使用typedef Set <...
Delphi你可以在这里使用TYPE而不会出现问题
C Builder跟随工作
如果使用全局
enum Regions
,可以使用typedef Set <...