Я преобразовываю выражение Delphi, замеченное ниже, в C++ Builder. Мой код C++ Builder генерирует сообщение об ошибке E2299. Я разместил полный текст для описания этой ошибки ниже. Можете ли вы порекомендовать изменение моего кода на C++, чтобы это работало.Преобразование команды Delphi в C++ Builder
//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 Не удается создать шаблон специализации от 'Set'
Вам нужно добавить свойство к вашей программе.
Объявление свойства указывает имя и тип и включает в себя как минимум один спецификатор доступа. Синтаксис объявления свойства:
property propertyName [indexes]: тип index integerConstant спецификаторы;
где:
PropertyName это любой допустимый идентификатор
[индексов] является необязательным, и представляет собой последовательность деклараций параметров, разделенных точкой с запятой
Каждая декларация параметр имеет вид Identifier1, ..., identifiern: type
тип должен быть предопределенным или ранее объявленным идентификатором типа. То есть объявления свойств, такие как свойство Num: 0..9 ..., являются недопустимыми.
предложение index integerConstant является необязательным.
спецификаторы представляют собой последовательность чтения, записи, хранения, по умолчанию (или nodefault) и реализуют спецификаторы.
Каждая декларация собственности должна иметь как минимум один спецификатор чтения или записи.
редактировать ниже:
Проблема была ЬурейеЕ показано ниже не будет компилировать внутри функции C++ Builder. У меня была настройка typedef в функции CheckRegion.
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)
{
Можете ли вы показать MCVE, чтобы обеспечить контекст. –
Предполагаю, что у вас нет этих строк в * одном и том же * файле, верно? –
Похоже, ошибка компилятора в том, что текст ошибки для Delphi E2299. Текст для C++ E2299 совершенно другой: http://docwiki.embarcadero.com/RADStudio/XE8/en/E2299_Cannot_generate_template_specialization_from_'specifier'_(C%2B%2B) –