我正在尝试在 XCode 中用 C++ 创建一个库,并尝试在 iPhone 项目中使用它。我正在使用 XCode 4.3.2。由于 iOS 开发中没有现成的模板可用于创建 C++ 库,因此我使用 Mac OSX - Framework & Library -> C/C++ Library 选项。
在这个项目中,我有 .h 和 .cpp 文件。我有意将我的 C++ 代码保存在 .cpp 文件中,因为它以后可能会在 Android 或 Windows 8 上使用。为了让它链接到示例 iPhone 项目,我已修改项目的目标以指向最新的 SDK iOS 5.1 ,并使用架构 armv6 和 armv7。
以下是我的 .h 文件
#ifndef Test_Test_h
#define Test_Test_h
class Test { --> I get the error here saying unknown type 'class'; did you mean 'Class'?
public:
Test();
~Test();
int addTwoNums(int a, int b);
};
#endif
以下是我的 C++ 库中的 .cpp 文件
#include <iostream>
#include "Test.h"
Test::Test(){}
Test::~Test(){}
int Test::addTwoNums(int a, int b)
{
return (a + b);
}
现在,为了在我的 iPhone 项目中启用函数调用,我创建了一个将 C++ 对象嵌入到 .mm 类中的包装层,由本文提供: http ://www.philjordan.eu/article/mixing-objective-c- c++-and-objective-c++
以下是我的包装头文件的实现,它是我单独的 iPhone 项目的一部分
#import <Foundation/Foundation.h>
@interface TestWrapper : NSObject
-(id)init;
-(int)returnSumFromCpluspus:(int) a b:(int) b;
@end
以下是我的单独 iPhone 的包装器 .mm 文件部分的实现
#import "TestWrapper.h"
#import "Test.h"
@implementation testWrapper
{
Test *tst;
}
-(id) init
{
self = [super init];
if (self) {
tst = new tst();
if(!tst)
self = nil;
}
return self;
}
-(int)returnSumFromCpluspus:(int) a b:(int)b
{
int result = 0;
if(tst)
result = tst->addTwoNums(a,b);
return result;
}
- (void)dealloc
{
if(tst)
delete tst;
}
@end
现在在我的 iPhone 项目中,我已经将它与这个静态库链接起来。只有当我在我的 iPhone 项目的目标中选择“编译源为:Objective-C++”而不是我的 C++ 静态库项目时,我才能很好地编译和调试。如果我将编译源更改为:根据文件类型”,我会收到编译错误:
未知类型名称“类”;您的意思是“类”吗?预期 ';" 在顶级装饰器之后。
我的问题是必须将我的 iPhone 项目属性目标编译类型更改为 Objective-C++,而不是我的静态库 C++ 项目,或者是否有其他方式,我可能会丢失并且不知道?
在这方面的任何帮助将不胜感激!
谢谢,阿希什