2009-12-11 3 views
0

// ----------------------------------- ---------------------------------Comment écrire une classe de gestion C++ pour l'objectif C

MISE À JOUR: J'ai foiré. J'ai laissé un appel directement à openfeint dans mon AppDelegate-> onApplicationWillResignActive qui causait l'erreur C++ du compilateur.

Mes interprétations, le singleton fonctionne si quelqu'un pensait à essayer la même chose. Assurez-vous simplement d'inclure l'en-tête dans le fichier .m et non le fichier d'en-tête.

// -------------------------------------------- Je construis une application pour iPhone, et j'utilise le SDK/Library/Framework (??) d'Openfeint est écrit en C++.

Je me demande s'il est possible d'écrire une classe pour s'interfacer avec C++ afin de ne pas avoir à changer mes classes ObjC en fichiers .mm.

J'ai essayé de créer un singleton, dans l'espoir que je puisse l'inclure dans les fichiers est en-tête .m normal, mais cela ne fonctionne pas, je dois encore faire le fichier qui comprend l'en-tête .mm

La raison pour laquelle je veux faire ceci (ou quelque chose comme ceci) est parce que je n'ai aucune expérience avec le C++, et la modification des fichiers ObjC en C++ a provoqué des erreurs et des avertissements.

Voici le singleton créé en ...

// -------------------------------------------------------------------- 
// 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 

implmentation

// -------------------------------------------------------------------- 
// 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 
+0

S'il vous plaît ne pas inventer vos propres termes, en particulier ne pas inventer vos propres étiquettes. –

+0

Mon diable, je ne savais pas que j'avais fait ça. – gargantuan

Répondre

0

je fais quelque chose de similaire avec une bibliothèque C++ différent (GeographicLib) et il fonctionne sans problème. Assurez-vous simplement qu'aucun code C++ ou en-tête C++ importé ne se trouve dans votre fichier .h. Cependant, je ne vois rien de mal dans votre code, alors j'ai peur de ne pas pouvoir vraiment vous aider. Je n'ai aucune expérience avec OpenFeint.

2

C'est certainement possible de le faire, malheureusement, vous n'avez pas vraiment donné d'informations qui pourraient nous aider à déterminer les problèmes que vous rencontrez. Vous dites que les utilisateurs de l'en-tête OpenfeintController.h doivent être Objective-C++, mais il ne semble pas y avoir de C++ inclus dans l'en-tête que vous avez posté (donc cela ne devrait pas être nécessaire).

Si la compilation donne des erreurs lorsque vous faites cela, affichez les erreurs afin que nous puissions voir ce qui se passe réellement.