gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:29:58 24 4
gpt4 key购买 nike

我使用的是 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;

最佳答案

根据 the documentationCODE=CPP 选项告诉 Pro C 生成 C++ 而不是 C。它没有说明提供给它的代码。

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

To generate C++ compatible code, the PARSE option must be either NONE or PARTIAL. If PARSE=FULL, the C parser runs, and it does not understand C++ constructs in your code, such as classes.

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

Fatal error while doing C preprocessing

…这应该是不可能的,因为完整的 C 预处理只应该在 PARSE=FULL 模式下发生。Pro C++ 解析器也有可能被破坏,以至于它只接受用关键字 class 定义的类中的成员函数。我这样说只是因为人们普遍误以为使用关键字 struct 定义的类不能包含此类内容 — 您可以尝试调整您的代码以查看解析器作者是否犯了这个错误。

关于c++ - 使用 Pro*C,如何使用带有构造函数的 C++ 结构,在 EXEC SQL BEGIN DECLARE SECTION 中复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53206132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com