使用Pro*C,如何使用带有构造函数的C++结构,在EXEC SQL BEGIN DECLARE SECTION中复制构



我使用的是Pro*C版本12.2.0.1.0。为了在SQLINSERT语句中使用主机数组,我使用了如下结构的数组:

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构建命令如下:

proc code=cpp parse=partial 'include=(<list-of-comma-separated-include-folder-names>)' xyz.pc

但是,当我使用Pro*C编译器进行编译时,使用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。它没有说明提供给它的代码。

您可以将"parse"模式更改为PARTIAL,以允许在提供的代码中使用C++语法。

若要生成与C++兼容的代码,PARSE选项必须是NONE或PARTIAL。如果是PARSE=FULL,则C解析器运行,并且它不理解代码中的C++构造,例如类。

奇怪的是,当您提供CODE=CPP时,PARSE=PARTIAL应该是默认值,但这似乎不起作用,如错误所示:

进行C预处理时发生致命错误

…这应该是不可能的,因为全C预处理只应该在CCD_。ProC++解析器也有可能被破坏,以至于它只接受用关键字class定义的类中的成员函数。我这么说只是因为人们普遍误解用关键字struct定义的类不能包含这样的东西—您可以尝试调整代码,看看解析器作者是否犯了这个错误。

相关内容

  • 没有找到相关文章