混合Objective C,(*.m,*.mm和.c /.cpp)文件

Ami*_*k12 14 c++ cocoa objective-c objective-c++

在我的项目中,核心库是C/C++文件的一部分,而UI需要在Objective C中开发,我能够从Objective C/.mm文件访问/调用C++函数,但到目前为止没有反转,即我不是能够从C++文件调用Objective C函数,当我试图包括Objective C头甚至系统头

#import <foundation/foundation.h> 
Run Code Online (Sandbox Code Playgroud)

大约1000+编译错误,

这样的事情

/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:180:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:180: error: expected unqualified-id before '@' token


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:182:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:182: error: expected initializer before '*' token


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183: error: 'NSString' was not declared in this scope


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183: error: 'aSelectorName' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

我错过了一些预编译标志等..任何人都可以建议我,最好的方式来调用/访问从NSObject继承的目标C类,而不需要修改很多C++代码,我只需要调用一个函数

代码结构/包含头文件的顺序是

Some system header file
Some Core Class Header file 

#import <foundation/foundation.h>
Run Code Online (Sandbox Code Playgroud)

小智 47

如果您的.cpp文件包含需要使用Objective-C的C++代码,请将该.cpp文件重命名为.mm或传递-x objective-c++给编译器.

  • 使用Xcode 4.6我在项目级别这样做是为我的项目的Build Settings选项卡中的"Apple LLVM Compiler 4.2 - Language"下的"Other C++ Flags"和"Other C Flags"设置`-x objective-c ++`. (3认同)
  • @some在这种情况下,右键单击项目树上的文件,选择Get Info,然后在File Type中选择sourcecode.cpp.objcpp.这将告诉Xcode使用`-x objective-c ++`编译该文件. (2认同)