簡體   English   中英

將Delphi Set命令轉換為C ++ Builder

[英]Convert Delphi Set command to 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 ...)無效。

index integerConstant子句是可選的。

說明符是讀取,寫入,存儲,默認(或非默認)序列,並實現說明符。

每個屬性聲明必須至少具有一個讀或寫說明符。

在下面編輯:

問題是下面看到的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)
{

您在錯誤的地方使用了typedef Set ...

如果使用本地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;
}

德爾福,你可以在這里使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM