代码之家  ›  专栏  ›  技术社区  ›  Volker Voecking

Objy-C与C++代码的混合

  •  4
  • Volker Voecking  · 技术社区  · 17 年前

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

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

    class TheClass
    {
    public:
    [...]
    
    enum TheEnum
    {
        YES,
        NO,
    };
    
    [...]
    };
    

    包括(如果使用“导入”-如果重要的话)在ObjoOTC/C++源文件(*.mm)中带有上面类声明的头文件将使编译失败,因为预处理器将用“(BOOL)1”替换“yes”(同样(“BOOL”0)”也“不”。

    有没有一种方法可以在不重命名枚举值的情况下修复它?

    2 回复  |  直到 10 年前
        1
  •  5
  •   xtofl Adam Rosenfield    17 年前

    YES and NO are predefined constants 在objective-c中,在objc.h头中声明。

    您应该能够阻止预处理器展开“是”和“否”宏。这可以通过本地 #undef fing 他们。

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

        2
  •  -1
  •   Meredith L. Patterson    17 年前

    这个 #import Objy-C++源文件中的C++Head是否应该包含在 #include . 我认为,虽然不是100%确定,但include指令的选择( 包括: VS 输入输出 )确定使用的预处理器。

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

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

    推荐文章