首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合目标C,(*.m,*.mm & .c /.cpp )文件

混合目标C,(*.m,*.mm & .c /.cpp )文件
EN

Stack Overflow用户
提问于 2011-01-17 23:15:18
回答 5查看 33.5K关注 0票数 15

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

代码语言:javascript
复制
#import <foundation/foundation.h> 

绕过1000+编译错误,

像这样的东西

代码语言:javascript
复制
/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++代码,我只需要调用一个函数

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

代码语言:javascript
复制
Some system header file
Some Core Class Header file 

#import <foundation/foundation.h>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-17 23:17:42

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

票数 49
EN

Stack Overflow用户

发布于 2011-01-18 00:34:54

我发现不可能在C++头文件中使用任何Objective-c。

但是,您可以在实现文件中包含Objective-c。

(.mm或您可以在文件的信息中设置如何解释.cpp文件。选择信息->常规:文件类型:Sourcecode.cpp.objcpp)

使用

cppClass.h:

代码语言:javascript
复制
class objcClass;

objcClass* mMemberVariable;

cppClass.mm:

代码语言:javascript
复制
#import "objcClass.h";

void cppFunction(){
    [objcClass message];
}

在cpp头文件中。

然后在.cpp或.mm文件中包含定义类的标头。

票数 4
EN

Stack Overflow用户

发布于 2015-10-30 03:28:25

如果你使用Qt,Q_FORWARD_DECLARE_OBJC_CLASS宏可以用来向前声明一个Objective-C类。

作为参考,下面是实现:

代码语言:javascript
复制
#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
#endif
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4714698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档