我有使用由一个C ++库提供的功能一个Objective-C / C ++应用程序。

其中C ++类的包括一个枚举是这样的:

class TheClass
{
public:
[...]

enum TheEnum
{
    YES,
    NO,
};

[...]
};

包含(使用#import -if该事宜)与一个Objective-C / C ++源文件(* .mm)上述类声明头文件将使编译失败,因为预处理器将取代的“是”通过术语 “(BOOL)1”(以及类似的 “否” 通过 “(BOOL)0”)。

有一种方法来解决,如果没有重命名枚举的值?

有帮助吗?

解决方案

YES和NO是预定义的常数的在Objective-C的,在报头objc.h声明。

您应该能够防止预处理器展开“YES”和“NO”宏观的。这可以通过在本地 #undeffing 他们来完成。

但在技术上,如果您使用的是语言的关键字作为标识符,你可以期望的麻烦。你会不会写含有称为MAX_PATH成员的类,你会吗?

其他提示

<击>的#import物确实 - C ++头在一个Objective-C ++源文件应包含#include。我认为,虽然是不是100%确定,即的选择包括指令(#include VS #import)确定哪个预处理器使用。

<击>

<击>也可逆转在枚举常数的声明,因为通过默认,枚举的构件与从0开始的整数相关联。

每评论,我错了。看起来你不得不重新改写枚举。遗憾:(

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top