2010-05-06 5 views
1

Je voudrais utiliser un type de pile C++ dans Objective-C, mais je rencontre des problèmes. Voici un échantillon de ce que je voudrais faire:Pile C++ dans Objective-C++

#import <stack> 
#import <UIKit/UIKit.h> 

@interface A : NSObject { 
    stack<SEL> selectorStack; 
} 

@end 

Malheureusement, cela ne compile pas. Après avoir manipulé le code pendant un moment et essayé différentes choses, je n'arrive pas à trouver un moyen d'y parvenir. Quelqu'un peut-il me dire la meilleure façon d'utiliser une pile C++ dans un objet Objective-C ou si c'est même possible?

Merci.

MISE À JOUR:

Eh bien, la réponse de KennyTM a travaillé sur mon exemple de fichier, mais pour une raison quelconque quand j'ai essayé de renommer la classe, il cesser de travailler. Voici le code que j'ai en ce moment:

#import <stack> 
#import <UIKit/UIKit.h> 

@interface MenuLayer : NSObject { 
    std::stack<SEL> selectorStack; 
} 

@end 

Le compilateur recrache les erreurs suivantes:

stack: No such file or directory 
expected specifier-qualifier-list before 'std' 
+2

Assurez-vous que vous ne l'avez pas accidentellement renommé en terminant par '.m' au lieu de' .mm'. Sinon, les en-têtes C++ ne sont pas dans les chemins de recherche d'en-tête (et vous ne pouvez pas utiliser C++ bien sûr). –

+0

Je l'ai vérifié deux fois, et l'extension est .mm. Juste pour être clair cependant, l'interface est située dans un fichier d'en-tête. Cela fait-il une différence? – LandonSchropp

+1

Si l'en-tête est inclus dans un fichier Objective-C ('.m'), vous vous retrouverez avec le même problème. Voir par exemple [ici] (http://stackoverflow.com/questions/2262011/adding-c-object-to-objective-c-class/2262395) pour des alternatives. –

Répondre

2

Avez-vous essayé

@interface A : NSObject { 
    std::stack<SEL> selectorStack; 
} 
+0

Salut, merci pour la réponse rapide. Je me sens un peu stupide de ne pas avoir spécifié le nom de classe complet. Lorsque j'ai changé cela sur mon fichier d'exemple, il a résolu le problème. Cependant, j'ai essayé de changer le nom de la classe en quelque chose d'autre et le compilateur a craché quelques nouvelles erreurs. J'ai mis à jour mon message avec plus d'informations. Merci encore. – LandonSchropp

1

Pour le deuxième problème assurez-vous que vous n'avez pas accidentellement renommé le fichier se terminant par .m au lieu de .mm. Sinon, les en-têtes C++ ne sont pas dans les chemins de recherche d'en-tête (et vous ne pouvez pas utiliser C++ bien sûr).

En outre, si l'en-tête est inclus dans un fichier Objective-C ordinaire (.m), vous obtenez le même problème. Vous pourriez éviter cela, par exemple en utilisant opaque pointers.