XCode で C++ のライブラリを作成しようとしていて、それを iPhone プロジェクト内で使用しようとしています。XCode 4.3.2 を使用しています。iOS 開発では C++ ライブラリを作成するためのテンプレートが用意されていないため、Mac OSX - Framework & Library -> C/C++ Library オプションを使用しています。
このプロジェクトには、.h ファイルと .cpp ファイルがあります。後で Android または Windows 8 で使用される可能性があるため、意図的に C++ コードを .cpp ファイルに保持したいと考えています。サンプルの 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 プロジェクト内からの関数呼び出しを有効にするために、この記事の厚意により、.mm クラス内に C++ オブジェクトを埋め込むラッパー レイヤーを作成しました: 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 プロジェクトで、この静的ライブラリにリンクしました。C++ スタティック ライブラリ プロジェクトではなく、iPhone プロジェクトのターゲットで「ソースを次のようにコンパイル: Objective-C++」を選択した場合にのみ、コンパイルとデバッグを正常に行うことができます。コンパイル ソースを次のように変更すると、「ファイル タイプに従って」、コンパイル エラーが発生します。
不明な型名 'class'; 'Class' のことですか? トップレベルのデコレータの後に「;」が必要です。
私の質問は、静的ライブラリ C++ プロジェクトではなく、iPhone プロジェクト プロパティのターゲット コンパイル タイプを Objective-C++ に変更することを強制することですか、それとも別の方法がありますか?
この点でどんな助けでも大歓迎です!
ありがとう、アシーシュ