最小的例子如下所示. CppClass是C类,CppWrapper是包装它的ObjC类.
// CppClass.h#ifndef _CPP_CLASS_H_#define _CPP_CLASS_H_#include <vector>class CppClass{public: CppClass() {} ~CppClass() {}private: std::vector<int> my_ints;};#endif /* _CPP_CLASS_H_ */// CppWrapper.h#import <Foundation/Foundation.h>#import "CppClass.h"@interface CppWrapper : NSObject { CppClass* myCppClass;}@end// CppWrapper.mm#import "CppWrapper.h"@implementation CppWrapper- (ID)init{ self = [super init]; if (self) { myCppClass = new CppClass; } return self;}- (voID)dealloc{ delete myCppClass; [super dealloc];}@end// The file that uses CppWrapper// TestAppDelegate.m#import "TestAppDelegate.h"#import "CppWrapper.h"@implementation TestAppDelegate- (voID)applicationDIDFinishLaunching:(NSNotification *)aNotification{ myWrapper = [[CppWrapper alloc] init];}@end
我得到的错误是CppClass.h中的vector的#include.错误是
lexical or Preprocessor issue:
'vector'
file not found
这段代码在另一个(所有C)项目中运行良好,所以我很确定它是一个构建设置,或者我在包装类中做错了.我正在使用Xcode 4.我创建了一个默认的Cocoa Mac OS应用程序项目,所有设置都是默认设置.
更新:我刚刚意识到,如果我将TestAppDelegate的文件类型设置为Objective-C(或将其重命名为TestAppDelegate.mm),它就可以工作.我不明白的是,这个类是纯粹的Objective-C;为什么必须编译为Objective-C?在我的C类上使用Objective-C包装器的全部意义在于我不必将整个项目构建为Objective-C.
解决方法 您的CppWrapper类的问题在于它不提供纯Objective-C接口.在CppWrapper.h文件中,您要导入C类的头文件,这意味着任何导入包装类的Objective-C类都需要编译为Objective-C,包括TestAppDelegate.相反,你需要做这样的事情来完全隐藏CppWrapper.mm文件中的C:
// CppWrapper.h#import <Foundation/Foundation.h>@interface CppWrapper : NSObject { voID *myCppClass;}- (voID)doSomethingWithCppClass;@end// CppWrapper.mm#import "CppWrapper.h"#import "CppClass.h"@implementation CppWrapper- (ID)init { self = [super init]; if (self) { myCppClass = new CppClass; } return self;}- (voID)dealloc { delete myCppClass; [super dealloc];}- (voID)doSomethingWithCppClass { static_cast<CppClass *>(myCppClass)->DoSomething();}@end总结
以上是内存溢出为你收集整理的在Cocoa项目中使用C类时找不到标准C包含全部内容,希望文章能够帮你解决在Cocoa项目中使用C类时找不到标准C包含所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)