nac*_*o4d 8 c++ iphone xcode stl objective-c
我试图在Objective-C中创建一个包装器,所以我不必在库类之外编写c ++.
库主文件是 LLAHProcessor.h .cpp
我的包装是 LLAHProcessorWrapper.h .mm
它编译得很好,但当我添加LLAHProcessorWrapper
到其他类,(让我们说UIView)作为成员变量时,我得到了数百个错误,例如:
#include <map> : Map no such a file or directory
Run Code Online (Sandbox Code Playgroud)
在每个c ++类/结构中:
Expected specifier-qualifier list before ClassName
Run Code Online (Sandbox Code Playgroud)
就像编译器没有识别c ++代码一样.
我想知道我在这里失踪了什么.是否必须将我添加到Xcode Target Properties的事实:?
Other Link Flags : -lstdc++ -lz
Run Code Online (Sandbox Code Playgroud)
或者我可能需要在这里添加新标志?
提前致谢
您的问题是.m
文件被编译为C而不是C++.因此,当编译器在编译.m
文件时,即使在头文件中遇到任何C++ ,它也会barf.
毫无疑问,你必须在头文件中加入一些C++,因为Objective C对象包装了一个C++对象,但是有很多方法可以解决这个问题.一种方法是使用指向C++对象的指针,并使用__cplusplus
为C++(和Objective-C++)定义但不适用于C(或Objective-C)的方便的预处理器定义,例如
// LLAHProcessorWrapper.h
#if defined __cplusplus
class MyCPPClass; // forward class declaration
#else
typedef struct MyCPPClass MyCPPClass; // forward struct declaration
#endif
@interface MyOCClass : NSObject
{
@private
MyCPPClass* cppObject;
}
// methods and properties
@end
Run Code Online (Sandbox Code Playgroud)
由于您从不取消引用.mm
文件外部的cppObject成员,因此您永远不会为结构提供完整定义.
你会new
和delete
指针分别在-init
和-dealloc
.您将包含完整的C++类声明LLAHProcessorWrapper.mm
.
归档时间: |
|
查看次数: |
7785 次 |
最近记录: |