此处不允许将"int"值缩小到"short"的转换范围



最近我将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:

  1. 解决方法是否正确
  2. 如果是这样的话,那么如何使在一个地方更改它比在多个文件中更改它更通用呢
  3. 若并没有,解决问题的最佳方法是什么,这样它就不会进一步破坏任何东西

提前感谢。

理想情况下,所有GUID字段都应声明为无符号字段(例如,请参阅本Microsoft文档(。但是有些语言(例如Java(不支持无符号整数。因此,看起来您的C++GUID结构是由Java程序员定义的。

如果可以更改GUID的定义,请执行该操作。如果没有,恐怕您将不得不将(short)强制转换应用于DEFINE_GUID宏的所有出现(除非您的编译器有某种方法可以禁用此错误,如您原始文章的注释中所建议的(。Java程序员必须一直这样做。

相关内容

  • 没有找到相关文章

最新更新