我正在使用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构建命令为:
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;
答案 0 :(得分:1)
对于每个the documentation,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
定义的类不能包含此类内容-您可以尝试调整代码以查看解析器作者是否犯了此错误。