Van*_*nya 50 c++ objective-c ios5
我正在尝试从SpeakHere Apple Xcode项目示例中实现AQRecorder.h类,但即使我将我的实现类重命名为ext.*.mm并且#import "AQRecorder.h"仍然会出现错误"Unknown type name 'class'; did you mean 'Class'?"以及许多其他问题.根据我的意思是它不被认为是C++类.
任何帮助将不胜感激.
Diz*_*iet 50
我刚刚遇到了这个问题.我有一个使用AQRecorder.mm的AQRecorder类的视图控制器.
当我在视图控制器中包含AQRecorder.h时,会发生这些错误.它在我看来是因为我直接的objective-c视图控制器(命名为.m文件)包含编译器抛出虚假错误的C++头文件.
有两种解决方案.最快的方法是将包含AQRecorder.h的视图控制器类重命名为.mm文件,在我的案例中将UIRecorderViewController从.m重命名为.mm.
或者,移动以下内容包括:
#include "CAStreamBasicDescription.h"
#include "CAXException.h"
Run Code Online (Sandbox Code Playgroud)
从AQRecorder.h进入AQRecorder.mm.这意味着在您的普通Obj-C源中将不再包含直接C++样式头文件(通过引用).
希望有所帮助,并且有意义.
Ste*_*HHH 21
在我的例子中,这个错误是由两个类中的循环"导入"语句引起的:每个类的头文件包含另一个类的标题,导致未知类型名称'ClassA'; 你是说'ClassB'吗?错误:

这是我收到此错误时配置导入语句的方式.在ClassA.h:
Import "ClassB.h"
Run Code Online (Sandbox Code Playgroud)
在ClassB.h:
Import "ClassA.h"
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我使用了@classforward声明指令来转发声明ClassA ClassB.h(这使得预编译器承诺ClassA是一个有效的类,并且它将在编译时可用).例如:
在ClassA.h:
Import "ClassB.h"
Run Code Online (Sandbox Code Playgroud)
在ClassB.h:
@class ClassA;
Run Code Online (Sandbox Code Playgroud)
这修复了未知类型名称'ClassA'错误,但也引入了一个新错误ClassB.m:: 接收器类型'ClassA'例如消息是一个前向声明.例如:

要修复这个新错误,我必须ClassA.h在ClassB(ClassB.m)的实现文件的顶部导入.这两个错误现在都已解决,我得到零错误和警告.
例如,我现在有:
在ClassA.h:
Import "ClassB.h"
Run Code Online (Sandbox Code Playgroud)
在ClassB.h:
@class ClassA;
Run Code Online (Sandbox Code Playgroud)
在ClassB.m:
Import "ClassA.h"
Run Code Online (Sandbox Code Playgroud)
现在已解决这两个错误消息.
我遇到了同样的错误,希望我的解决方案可以帮到你.Xcode编译器可以在"*.mm"文件中编译objective-c&c ++,因此您可以更改所有用".mm"后缀导入"AQRecorder.h"(所有直接和间接)文件的文件名.但你可能不这样做,你可能会发现SpeakHereController和SpeakHereViewController之间的关系有点棘手,我刚学会了他如何使用它,在nib文件中创建SpeakHereController对象,所以SpeakHereViewController文件不必导入"AQRecorder" .h"文件.我的英语很愚蠢,我希望我的回答可以帮到你.
| 归档时间: |
|
| 查看次数: |
45320 次 |
| 最近记录: |