为什么带有负值的枚举会导致Objective-CC++出现问题?

为什么带有负值的枚举会导致Objective-CC++出现问题?,第1张

概述出于各种实现原因,我已经定义了以下枚举: typedef enum HBSnakeMovementDirection{ HBSnakeMovementDirectionUp = 1, HBSnakeMovementDirectionDown = -1, HBSnakeMovementDirectionRight = 2, HBSnakeMovementDirect 出于各种实现原因,我已经定义了以下枚举:
typedef enum HBSnakeMovementDirection{    HBSnakeMovementDirectionUp = 1,HBSnakeMovementDirectionDown = -1,HBSnakeMovementDirectionRight = 2,HBSnakeMovementDirectionleft = -2}HBSnakeMovementDirection;

但是,如果我尝试使用HBSnakeMovementDirectionRight,我会收到以下警告:

Implicit conversion changes signedness: 'int' to 'HBSnakeMovementDirection'

任何其他枚举值都没有问题.这有什么问题?我认为它可能与混合负面和正面枚举值有关,但我无法找到任何关于此的确定性.

(我能够提出所有积极的枚举值,让我可以解决这个问题,但它仍然难倒我,所以我想我会问它.)

我应该说,就像我的所有项目一样,我启用几乎所有警告 – 因此,-Wconversion的投诉 – 并将其视为错误. (我喜欢在编译时尽可能严格.)我正在使用LLVM 1.6.

更新1:字面上任何使用HBSnakeMovementDirectionRight都会产生前面的警告:

HBSnakeMovementDirection movementDirectionRight = HBSnakeMovementDirectionRight;

我必须将HBSnakeMovementDirectionRight转换为HBSnakeMovementDirection以使警告静音.

更新2:根据要求,这是在我的机器上发出的整个构建命令:

http://pastie.org/1580957

更新3:这是我正在GitHub上托管的确切项目:

https://github.com/LucasTizma/Hebi

具体来说,以下树:

https://github.com/LucasTizma/Hebi/tree/89262e2e53881584daf029e3dd5f1e99dfbd6f96

解决方法 正如Darren所说,它确实看起来像编译器错误,而Dave说它不会发生在Clang 2.0中.

我发现以下类型定义使用Clang 1.6编译OP代码:

typedef enum HBSnakeMovementDirection {    HBSnakeMovementDirectionUp = 1,// Default movement direction upon initialization via -init    HBSnakeMovementDirectionDown = -1,HBSnakeMovementDirectionleft = -2,NBSnakeMovementDirectionNone = -3}HBSnakeMovementDirection;

(注意额外的NBSnakeMovementDirectionNone)

这可能与已修复的LLVM错误1884有关.

总结

以上是内存溢出为你收集整理的为什么带有负值的枚举会导致Objective-C/C++出现问题?全部内容,希望文章能够帮你解决为什么带有负值的枚举会导致Objective-C/C++出现问题?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1239196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存