4

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

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

class TheClass
{
public:
[...]

enum TheEnum
{
    YES,
    NO,
};

[...]
};

在 Objective-C/C++ 源文件 (*.mm) 中包含(使用#import -如果重要的话-)带有上述类声明的头文件将导致编译失败,因为预处理器会将“YES”替换为“ (BOOL) 1"(同样地,“(BOOL) 0”为“NO”)。

有没有办法在不重命名枚举值的情况下解决这个问题?

4

2 回答 2

5

YES 和 NO 是Objective-C 中预定义的常量,在 objc.h 头文件中声明。

您应该能够防止预处理器扩展“YES”和“NO”宏。这可以通过在本地#undef查找它们来完成。

但从技术上讲,如果您使用语言关键字作为标识符,您可能会遇到麻烦。您不会编写一个包含名为 的成员的类MAX_PATH,对吗?

于 2009-08-10T12:26:45.747 回答
-1

确实很重要——Objective-C++ 源文件中的#importC++ 头文件应该包含在#include. 我认为,虽然不是 100% 确定,但包含指令 ( #includevs #import) 的选择决定了使用哪个预处理器。

您还可以反转枚举中常量的声明,因为默认情况下,枚举的成员与从 0 开始的整数相关联。

根据评论,我错了。看起来你必须重写枚举。对不起 :(

于 2009-08-10T11:49:15.960 回答