Я использую Pro * C версии 12.2.0.1.0.
Чтобы использовать массивы хостов в операторе SQL INSERT, я использую массив структур, как показано ниже:
EXEC SQL BEGIN DECLARE SECTION;
struct XYZ {
int adata;
XYZ() {
this->adata = 0;
}
XYZ(const XYZ& src) {
this->adata = src.adata;
}
XYZ& operator =(const XYZ &src) {
this->adata = src.adata;
return *this;
}
};
XYZ axyz[20];
EXEC SQL END DECLARE SECTION;
Моя команда pro * c build выглядит так:
proc code=cpp parse=partial 'include=(<list-of-comma-separated-include-folder-names>)' xyz.pc
Но, когда я компилирую, используя Pro * C Compiler, используя code=cpp
, как в proc code=cpp
, , , Я получаю ошибку, как указано ниже:
Pro*C/C++: Release 12.2.0.1.0 - Production on Thu Nov 8 05:36:56 2018
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
System default option values taken from: /app/oracle/product/12c/precomp/admin/pcscfg.cfg
Syntax error at line 64, column 2, file xyz.pc:
Error at line 64, column 2 in file xyz.pc
XYZ() {
.1
PCC-S-02201, Encountered the symbol "XYZ" when expecting one of the following:
} char, const, double, enum, float, int, long, ulong_varchar,
OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
struct, union, unsigned, utext, uvarchar, varchar, void,
volatile, a typedef name,
Syntax error at line 67, column 15, filexyz.pc
XYZ(const XYZ& src) {
..............1
PCC-S-02201, Encountered the symbol "&" when expecting one of the following:
, ( ) [
Error at line 0, column 0 in file xyz.pc
PCC-F-02102, Fatal error while doing C preprocessing
Мне нужно использовать структуру C ++ с конструктором и конструктором копирования, чтобы позаботиться об инициализации, но чтобы компилятор Pro * C принял это?
Следующее объявление разрешено, но мне нужно использовать конструкторы для инициализации:
EXEC SQL BEGIN DECLARE SECTION;
struct XYZ {
int adata;
};
struct XYZ axyz[10];
EXEC SQL END DECLARE SECTION;
в документация, CODE=CPP
опция говорит Pro C генерировать C ++, а не C. Он ничего не говорит о коде, который вы предоставить ему.
Вы можете изменить режим «разбора» на PARTIAL
разрешить синтаксис C ++ в предоставленном вами коде.
Для генерации кода, совместимого с C ++, опция PARSE должна быть NONE или PARTIAL. Если
PARSE=FULL
, синтаксический анализатор C работает, и он не понимает конструкции C ++ в вашем коде, такие как классы.
Жутко, PARSE=PARTIAL
должно быть по умолчанию, когда вы предоставили CODE=CPP
, но это, похоже, не работает, как показывает ошибка:
Неустранимая ошибка при предварительной обработке C
… Что должно быть невозможно, так как полная предварительная обработка C должна происходить только в PARSE=FULL
Режим.
Также смутно возможно, что парсер Pro C ++ сломан так, что он принимает только функции-члены в классе, определенном с ключевым словом class
, Я говорю это только потому, что это распространенное заблуждение, что классы определены с ключевым словом struct
не может содержать такие вещи — вы можете попробовать настроить свой код, чтобы увидеть, не ошиблись ли авторы парсера.
Других решений пока нет …