混合Objective-C和C ++代码

时间:2009-08-10 11:43:52

标签: c++ objective-c c-preprocessor name-clash

我有一个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”的“否”)。

有没有办法在不重命名枚举值的情况下修复它?

2 个答案:

答案 0 :(得分:5)

在Objective-C中的

YES and NO are predefined constants,在objc.h头文件中声明。

您应该能够阻止预处理器扩展“是”和“否”宏。这可以通过本地#undeffing来完成。

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

答案 1 :(得分:-1)

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

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

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