0

// ------------------------------------------------ --------------------

更新:私は台無しにしました。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
4

2 に答える 2

2

これは確かに可能ですが、残念ながら、どのような問題が発生しているかを判断するのに役立つ情報が提供されていません。ヘッダーのユーザーはObjective-C++である必要があると言いますが、OpenfeintController.h投稿したヘッダーにはC++が含まれていないようです(したがって、これは必要ありません)。

これを行ったときにコンパイルでエラーが発生する場合は、エラーを投稿して、実際に何が起こっているかを確認してください。

于 2009-12-11T14:47:07.090 に答える
0

別のC++ライブラリ(GeographicLib)で同様のことを行い、問題なく動作します。.hファイルにC++コードまたはインポートされたC++ヘッダーが含まれていないことを確認してください。ただし、コードに問題はないので、お役に立てないのではないかと思います。私はOpenFeintの経験がありません。

于 2009-12-11T13:45:38.170 に答える