使用Pro * C,如何在构造函数中使用C ++结构,在EXEC SQL BEGIN DECLARE部分中复制构造函数

时间:2018-11-08 10:47:04

标签: c++ oracle oracle12c oracle-pro-c

我正在使用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;

1 个答案:

答案 0 :(得分:1)

对于每个the documentationCODE=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定义的类不能包含此类内容-您可以尝试调整代码以查看解析器作者是否犯了此错误。