Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

#include <string> file not found in iOS in C++ file

Tags:

c++

xcode

ios

I have a objective c/c++ project under iOS, moving it from OS/X and I get a 'file not found' error on

#include <string>

It's a clean project, and I've just added the files from the old project. Are the STL includes set up in XCode? A find produces a number of possibilities e.g.

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/usr/include/c++/4.2.1/debug/

but adding this to the search path just threw up more errors. Any suggestions? (apart from don't use string - it's in house code I'm porting)

xcode 4.2.1, ios5.0 running on OS/X 10.7.3 and it's in a .cpp file, the code works fine on OS/X

like image 668
daven11 Avatar asked May 01 '12 22:05

daven11


2 Answers

Are you really sure <string> is included only from a .cpp file?

I just tested on a fresh project, by adding a .cpp file and including <string>, and it works, just as expected (same Xcode version, same SDK version).

But if I include <string> in a .m file, then of course I got a «file not found» compiler error.

So double-check this, as the error may come from here.

Do you include <string> from a .cpp file only, or from a .h file, intended to be used by a .cpp implementation?
Then maybe it's also included by a .m file, hence the error.

Also check your precompiled headers, if any, to see if you include some C++ stuff there...

Also remember, in that later case, that you can rely on the __cplusplus macro, when needed.

like image 83
Macmade Avatar answered Sep 20 '22 00:09

Macmade


If you include a header in an ObjC file and it includes <string> then you hit errors like this. For all .m files XCode uses a C compiler (clang or llvm-gcc). For all .mm files it will use (clang++ or llvm-g++).

I suggest going through and renaming all your .m files to .mm. Including main.m to main.mm.

like image 21
Halsafar Avatar answered Sep 17 '22 00:09

Halsafar