我有一个Objective-C / C ++应用程序,它使用C ++库提供的功能。
其中一个C ++类包含这样的枚举:
class TheClass
{
public:
[...]
enum TheEnum
{
YES,
NO,
};
[...]
};
在Objective-C / C ++源文件(* .mm)中包含(使用#import -if that matters-)带有上述类声明的头文件将使编译失败,因为预处理器将替换为“YES”术语“(BOOL)1”(同样“(BOOL)0”的“否”)。
有没有办法在不重命名枚举值的情况下修复它?
答案 0 :(得分:5)
YES and NO are predefined constants,在objc.h头文件中声明。
您应该能够阻止预处理器扩展“是”和“否”宏。这可以通过本地#undef
fing来完成。
但从技术上讲,如果您使用语言关键字作为标识符,则会遇到麻烦。你不会写一个包含名为MAX_PATH
的成员的类,对吗?
答案 1 :(得分:-1)
#import
确实很重要 - Objective-C ++源文件中的C ++标题应包含在#include
中。我认为,虽然不是100%肯定,但是include指令(#include
vs #import
)的选择决定了使用哪个预处理器。
你也可以反转枚举中常量的声明,因为默认情况下,枚举的成员与从0开始的整数相关联。
根据评论,我错了。看起来你必须重写枚举。对不起:(