相关疑难解决方法(0)

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

我有一个Cocoa项目(Mac OS X应用程序),所有Objective-C.我从另一个项目中引入了一个C++类(我知道它可以工作),然后为它创建一个Objective-C包装器.ObjC包装器类使用.mm扩展名.但是,C++头文件包含#include标准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 …
Run Code Online (Sandbox Code Playgroud)

c++ cocoa objective-c wrapper

8
推荐指数
1
解决办法
6321
查看次数

我可以在编译和链接中将C++主函数和类与Objective-C和/或C例程分开吗?

我有一个小的C++应用程序,我导入了Objective-C类.它可用作Objective-C++文件,.mm,但任何包含可能最终包含某些Objective-C标头的标头的C++文件必须重命名为.mm扩展名以获取正确的GCC驱动程序.

有没有办法为Objective-C类编写一个纯粹的C++包装器,或者我可以以某种方式将Objective-C对象分开并将它们分开链接?也许即使Objective-C类成为一个小型库,我可以在编译时静态重新链接?

问题是这个代码是跨平台的,并且在通常不使用Objective-C(即不是Mac)的系统上编译更加困难.即使预处理器命令限制在Windows或Linux上实现Objective-C代码,原始代码仍然具有.mm扩展名,GCC仍将代码视为Objective-C++.

c++ compiler-construction objective-c objective-c++

6
推荐指数
1
解决办法
1952
查看次数