оракул — Используя Pro * C, как использовать структуру C ++ с конструктором, скопируйте конструктор в EXEC SQL BEGIN DECLARE РАЗДЕЛ

Я использую 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;

0

Решение

в документация, 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 не может содержать такие вещи — вы можете попробовать настроить свой код, чтобы увидеть, не ошиблись ли авторы парсера.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]