最近我将SourcePro升级到2021版本,在RCB设置过程中,当它提示我选择C++方言时,我选择了唯一可用的选项,即C++14。安装完成后,我开始编译Tuxedo代码,目前在多个文件中遇到以下错误,比如我的Tuxedo项目中大约有200-250个文件,下面是我的Solaris操作系统和编译器的详细信息。
uname-a:
SunOS nzdrb12z 5.11 11.4.40.107.3 sun4v sparc sun4v非全球区域
cc-V:
抄送:Studio 12.6 SunC 5.15 SunOS_sparc 2017/05/30
错误:app/sdasup/home/mhp/source/developm/bc/include/bcIControlBlock.h";,线34:错误:不将"int"值缩小为"short"这里允许。"app/sdasup/home/mhp/source/developm/bc/include/bcIPControlBlockTran.h";,第48行:错误:不将"int"值缩小为"short"这里允许。"app/ssup/home/mhp/source/development/bc/include/bcIPConnectionParam.h";,第44行:错误:不将"int"值缩小为"short"这里允许。"app/ssup/home/mhp/source/development/bc/include/bcMwServicesGuid.h";,第15行:错误:不将"int"值缩小为"short"这里允许。"app/ssup/home/mhp/source/development/bc/include/bcMwServicesGuid.h";,第34行:错误:不将"int"值缩小为"short"这里允许。"app/ssup/home/mhp/source/development/bc/include/bcMwServicesGuid.h";,第36行:错误:不将"int"值缩小为"short"这里允许。"app/ssup/home/mhp/source/development/bc/include/bcMwServicesGuid.h";,第41行:错误:不将"int"值缩小为"short"这里允许。"app/ssup/home/mhp/source/development/bc/include/bcMwServicesGuid.h";,第45行:错误:不将"int"值缩小为"short"这里允许。
假设我选择了第一个错误消息文件来打开bcIControlBlock.h,并且行号34指向以下代码
DEFINE_GUID(IID_IAbcIControlBlock, 0xc7645022, 0x93e9, 0x11d1, 0x9d, 0x90, 0x0, 0x0, 0xf6, 0x4e, 0x16, 0x6a);
当搜索宏时,它有以下定义,
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
EXTERN_C const GUID name
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
作为一种变通方法,我厌倦了以下方法来解决它,
DEFINE_GUID(IID_IAbcIControlBlock, 0xc7645022, (short)0x93e9, 0x11d1, 0x9d, 0x90, 0x0, 0x0, 0xf6, 0x4e, 0x16, 0x6a);
尽管它运行良好,但我对我解决这个问题的方法非常怀疑。然而,更改多个文件似乎很痛苦。
Quesitons:
- 解决方法是否正确
- 如果是这样的话,那么如何使在一个地方更改它比在多个文件中更改它更通用呢
- 若并没有,解决问题的最佳方法是什么,这样它就不会进一步破坏任何东西
提前感谢。
理想情况下,所有GUID
字段都应声明为无符号字段(例如,请参阅本Microsoft文档(。但是有些语言(例如Java(不支持无符号整数。因此,看起来您的C++GUID
结构是由Java程序员定义的。
如果可以更改GUID
的定义,请执行该操作。如果没有,恐怕您将不得不将(short)
强制转换应用于DEFINE_GUID
宏的所有出现(除非您的编译器有某种方法可以禁用此错误,如您原始文章的注释中所建议的(。Java程序员必须一直这样做。