Re: Using C++ classes from Objective C
Re: Using C++ classes from Objective C
- Subject: Re: Using C++ classes from Objective C
- From: John Stiles <email@hidden>
- Date: Thu, 20 Mar 2008 09:32:56 -0700
Without starting a religious war, I have to disagree with this.
ObjC++ is probably a bad idea if you are a novice programmer in general,
but I think it also has some really good things going for it, and having
written huge amounts of ObjC++ code, I think it's perfectly
straightforward to use. It is by far your best bet for writing
cross-platform code that uses a native Cocoa front end.
Rob Napier wrote:
On Wed, Mar 19, 2008 at 4:12 PM, Jeremy <email@hidden> wrote:
Hi.
I am just starting to learn Cocoa and would like to use standard C++
classes from my Objective C/C++ classes.
You really don't. You think you do (probably because you know C++),
but then you enter the crazy messed up world of Objective-C++ and
discover that you really wish you hadn't. A bit of an overstatement,
yes, but really I'd recommend against using ObjC++ unless you have
existing C++ code that you have to bridge to, and then it's best used
just to wrap the C++ classes so that ObjC can deal with them. Learn
Cocoa in pure ObjC.
ObjC and C++ have very different models for managing memory, types,
pointers and well, just about everything. Memory management in
particular is a real hassle. ObjC++ strips away the safety nets from
both ObjC and C++ because now you have to track two very different
ways of managing memory (retain counting versus ref variables for
instance).
Is there any known documentation on how to do this, or does anyone
have any pointers?
I tried creating a new object of my C++ class and calling a method on
it in a .m file and received a bunch of errors (including new not
being found).
I then changed my .m file to a .mm file and all of the errors went
away except for one:
"cannot find interface declaration for 'MyClass'"
This probably means that ObjC expects there to be an ObjC class called
MyClass (rather than a C++ class called MyClass; they're completely
unrelated class structures). I suspect that you accidentally put
"@class MyClass" somewhere rather than "class MyClass", or possibly
wrote "@interface MyClass" somewhere. Alternately, you failed to put
"class MyClass" above the declaration of m_pMemberVariable and so the
compiler assumed MyClass was an ObjC class (this is less likely since
you should have gotten a compiler error elsewhere for that error).
I strongly recommend naming your ObjC and ObjC++ classes differently.
I typically name the ObjC++ classes ending in "Wrapper" but that's
because I only ever use these classes to wrap existing C++ classes
defined in separate C++-only projects.
Also, make sure that you're working in the right namespace. You may
need to say "new myNamespace::MyClass" here.
ObjC++ is deep magic. It is not a good place to learn Cocoa. It is a
useful tool once you know Cocoa and need to integrate it at key points
with C++.
-Rob
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden