在我的项目中,核心库是C/ C ++文件的一部分,虽然UI需要在Objective C中开发,但我能够从Objective C/.mm文件中访问/调用C++函数,但到目前为止,我不能从C++文件中调用Objective C函数,当我试图包括Objective C头甚至系统头时,我不能从Objective C文件中调用Objective C函数
#import <foundation/foundation.h> 绕过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我是不是遗漏了一些预编译的标志等等。有没有人可以建议我,调用/访问objective C类的最佳方法,它继承自NSObject,而不需要修改太多的C++代码,我只需要调用一个函数
包含头文件的代码结构/顺序为
Some system header file
Some Core Class Header file
#import <foundation/foundation.h>发布于 2011-01-17 23:17:42
如果您有一个包含也需要使用Objective-C的C++代码的.cpp文件,请将该.cpp文件重命名为.mm或将-x objective-c++传递给编译器。
发布于 2011-01-18 00:34:54
我发现不可能在C++头文件中使用任何Objective-c。
但是,您可以在实现文件中包含Objective-c。
(.mm或您可以在文件的信息中设置如何解释.cpp文件。选择信息->常规:文件类型:Sourcecode.cpp.objcpp)
使用
cppClass.h:
class objcClass;
objcClass* mMemberVariable;cppClass.mm:
#import "objcClass.h";
void cppFunction(){
[objcClass message];
}在cpp头文件中。
然后在.cpp或.mm文件中包含定义类的标头。
发布于 2015-10-30 03:28:25
如果你使用Qt,Q_FORWARD_DECLARE_OBJC_CLASS宏可以用来向前声明一个Objective-C类。
作为参考,下面是实现:
#ifndef Q_FORWARD_DECLARE_OBJC_CLASS
# ifdef __OBJC__
# define Q_FORWARD_DECLARE_OBJC_CLASS(classname) @class classname
# else
# define Q_FORWARD_DECLARE_OBJC_CLASS(classname) typedef struct objc_object classname
# endif
#endifhttps://stackoverflow.com/questions/4714698
复制相似问题