c++ - 使用 Pro*C,如何使用带有构造函数的 C++ 结构,在 EXEC SQL BEGIN DECLARE SECTION 中复制构造函数
问题描述
我正在使用 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;
解决方案
根据文档,该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
不能包含这些东西——你可以尝试调整你的代码,看看解析器作者是否犯了这个错误。
推荐阅读
- swift - 如何在 SwiftUI 中调整背景图像的大小而不影响屏幕视图?
- c# - HttpClient - 任务被取消异常
- dns - 域与子域与区域
- kubernetes - Kubernetes中微服务之间的相互通信
- c++ - gcc-8.2 中的异常编译器消息
- visual-studio - Visual Studio 2019 在文件中的快速查找 (Ctrl + F) 是否会在任何地方显示出现次数和索引?
- javascript - 重定向页面 Chrome 扩展
- php - 如何将时间转换为编码/加密字符串,如 PHP 中的 G7C
- c# - Azure Kubernetes .NET Core 应用程序到 Azure SQL 数据库间歇性错误 258
- javascript - 你可以在画布上使用 nextjs 图像组件吗