在Cocoa项目中使用C类时找不到标准C包含

在Cocoa项目中使用C类时找不到标准C包含,第1张

概述我有一个 Cocoa项目(Mac OS X应用程序),所有Objective-C.我从另一个项目中引入了一个C类(我知道它可以工作),然后为它制作一个Objective-C包装器. ObjC包装类使用.mm扩展名.但是,C头文件包含#includes到标准C头文件(例如< vector>),我得到了错误. 最小的例子如下所示. CppClass是C类,CppWrapper是包装它的ObjC类. / 我有一个 Cocoa项目(Mac OS X应用程序),所有Objective-C.我从另一个项目中引入了一个C类(我知道它可以工作),然后为它制作一个Objective-C包装器. ObjC包装类使用.mm扩展名.但是,C头文件包含#includes到标准C头文件(例如< vector>),我得到了错误.

最小的例子如下所示. 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包含所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1024365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存