当前位置:   article > 正文

Unknown type name 'class'; did you mean 'Class'? 解决方案_unknown type name 'import'; did you mean 'short'?

unknown type name 'import'; did you mean 'short'?

有时我们需要在OC的程序中使用已有的C++类,这时,我们可以把OC类的.m文件后缀改为.mm,就可以在里面使用C++类了。但是二者直接混用会出现一些问题以致编译无法通过,这时可以简单的通过把target中的compile source as改为oc++就可以通过编译。这是一个简单的做法,但两个世界确实很不一样,如此这样的深度混合有时会变地很棘手。

但是如果使用默认compile类型就在引入C++类后很可能会出错,

错误通常是这样的:

Unknown type name 'class'; did you mean 'Class'?

因为class CppObject根本不是有效的Objective-C语法, 所以编译器就被搞糊涂了。 正是因为Objective-C中没有class这个关键字. 所以要与Objective-C兼容,Objective-C++类的头文件必须仅包含Objective-C代码,绝对没有C++的代码 - 这主要是影响类型定义。
网上的文章已经提到一些解决方案.其中最好的一个是PIMPL,它也适用于现在的情况。这里还有一个适用于clang的新方法,可以将C++代码从Objective-C中隔开,这就是class extensions中ivars的。
PIMPL:网上可以找到相关文章,简单来说,就是把#import "CPPObject.h"改成@class CPPObject,就OK了。

这次我遇到的问题是在pch文件中解决的:

#ifdef __cplusplus

#import "NSUtil.h"

#import "UIUtil.h"

#import "SettingUtil.h"

#endif


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/926688
推荐阅读
相关标签
  

闽ICP备14008679号