3

I'm trying to make a simple Objective-C++ applicaiton. All of my code is compiling fine, including the use of C++ in Objective-C classes, until I try and add a C++ class to the mix. I've created a simple C++ class:

Test.h

class Test {

};

and included this file in a Objective-C class (with a .mm extension) and I get the following build error:

error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Test'

Clearly I'm missing some simple concept here. I'd appreciate some enlightment.

4 Answers 4

2

helixed's answer will not help, your class will be just skiped by preprocessor if __cplusplus undefined.

Most of all you trying to include C++ class from *.m file, try to rename it to *.mm. This solve the same problem on my side.

Sign up to request clarification or add additional context in comments.

Comments

2

Shouldn't the preprocessor command required be:

#ifdef __cplusplus

Comments

2

Well, after scanning more closely over Apple's Documentation, it looks like the answer to to use the __cplusplus preprocessor flag in the header file. Here's what the code looks like now:

#ifdef __cplusplus

class Test {

};

#endif

Comments

2

In Xcode 6 there is the following option:

Apple LLVM 6.0 - Language -> Compile Sources As

You can set that to Objective-C++ and then the file extension does not matter. This is particularly useful if you are working cross-platform and need to use other file extensions.

1 Comment

Almost five years later, this was quite helpful! It let me know what setting to look for, even on a later version of xCode. As you say, working on a cross-platform native code app, I was not looking forward to having to rename all my .cpp files to .mm! Thanks so much!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.