Volker Voecking Volker Voecking - 5 months ago 22
Objective-C Question

Mixing Objective-C and C++ code

I have an Objective-C/C++ application which uses functionality that is provided by a C++ library.

One of the C++ classes includes an enum like this:

class TheClass
{
public:
[...]

enum TheEnum
{
YES,
NO,
};

[...]
};


Including (using #import -if that matters-) a header file with the above class declaration in an Objective-C/C++ source file (*.mm) will make the compile fail since the preprocessor will replace "YES" by the term "(BOOL) 1" (and likewise "NO" by "(BOOL) 0").

Is there a way to fix that without renaming the values of the enum?

Answer

YES and NO are predefined constants in Objective-C, declared in the objc.h header.

You should be able to prevent the preprocessor to expand the "YES" and "NO" macro's. This can be done by locally #undeffing them.

But technically, if you're using a language keyword as an identifier, you can expect trouble. You won't write a class containing a member called MAX_PATH, would you?

Comments