// ------------------------------------------------ --------------------
更新:私は台無しにしました。AppDelegate->onApplicationWillResignActive で openfeint への直接の呼び出しを残したことが、コンパイラ C++ エラーの原因でした。
私の謝罪、誰かが同じことをしようと考えているなら、シングルトンはうまくいきます。ヘッダー ファイルではなく、.m ファイルに必ずヘッダーを含めてください。
// ------------------------------------------------ --------------------
私は iPhone アプリを構築しており、C++ で記述された Openfeint SDK/ライブラリ/フレームワーク (??) を使用しています。
ObjC クラスを .mm ファイルに変更する必要がないように、C++ とインターフェイスするクラスを作成することは可能でしょうか。
通常の .m ファイルにヘッダーを含めることができることを期待して、シングルトンを作成しようとしましたが、それは機能しません。ヘッダー .mm を含むファイルを作成する必要があります
私がこれ (またはこのようなこと) をしたい理由は、C++ の経験がなく、ObjC を C++ ファイルに変更するとエラーと警告が発生するためです。
これが私が作成したシングルトンです...
// --------------------------------------------------------------------
// OpenfeintController.h
// --------------------------------------------------------------------
#import <Foundation/Foundation.h>
@interface OpenfeintController : NSObject {
NSString *productKey, *secretKey, *displayName;
}
+(OpenfeintController*)sharedOpenfeintController;
- (void) initializeWithProductKey:(NSString *)pKey andSecretKey:(NSString *)sKey andDisplayName:dName;
- (void) launchOpenFeint;
- (void) submitHighScoreToLeaderboard:(NSString *)leaderboardId;
@end
実装
// --------------------------------------------------------------------
// OpenfeintController.mm
// --------------------------------------------------------------------
#import "OpenfeintController.h"
#import "OpenFeint.h"
static OpenfeintController *singletonOpenfeintController = nil;
@implementation OpenfeintController
+(OpenfeintController*)sharedOpenfeintController {
@synchronized(self) {
if (!singletonOpenfeintController) {
singletonOpenfeintController = [[OpenfeintController alloc] init];
}
}
return singletonOpenfeintController;
}
- (void) initializeWithProductKey:(NSString *)pKey andSecretKey:(NSString *)sKey andDisplayName:dName
{
//[OpenFeint initializeWithProductKey:pKey andSecret:sKey andDisplayName:dName andSettings:nil andDelegates:nil];
}
- (void) launchOpenFeint
{
}
- (void) submitHighScoreToLeaderboard:(NSString *)leaderboardId
{
}
@end