Unknown type name 'class'; did you mean 'Class'? 解决方案
2016-07-15 11:43
1041 查看
有时我们需要在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的。
[b]PIMPL:网上可以找到相关文章,简单来说,就是把#import "CPPObject.h"改成@class [b][b]CPPObject,就OK了。[/b][/b][/b]
[b][/b]
这次我遇到的问题是在pch文件中解决的:
#ifdef __cplusplus
#import "NSUtil.h"
#import "UIUtil.h"
#import "SettingUtil.h"
#endif
但是如果使用默认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的。
[b]PIMPL:网上可以找到相关文章,简单来说,就是把#import "CPPObject.h"改成@class [b][b]CPPObject,就OK了。[/b][/b][/b]
[b][/b]
这次我遇到的问题是在pch文件中解决的:
#ifdef __cplusplus
#import "NSUtil.h"
#import "UIUtil.h"
#import "SettingUtil.h"
#endif
相关文章推荐
- Objective-C的内省(Introspection)用法小结
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中使用NSString类操作字符串的方法小结
- Objective-C中NSNumber与NSDictionary的用法简介
- Objective-C实现冒泡排序算法的简单示例
- Objective-C中NSLog输出格式大全
- Objective-C实现自定义的半透明导航
- 浅析Objective-C的程序结构及面向对象的编程方式
- Objective-C的入门学习笔记
- Objective-C实现无限循环轮播器
- 全面解析Objective-C中的block代码块的使用
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- Objective-C中字符串NSString的常用操作方法总结
- 以实例讲解Objective-C中的KVO与KVC机制
- 简介Objective-C解析XML与JSON数据格式的方法
- 浅析Objective-C中分类Category的使用
- 举例讲解Objective-C中@property属性的用法