2009-11-06 5 views
0

Je suis confus.Déclaration sans type

Je fais ceci:

#include <vector> 

// List iteration 
typedef vector<registeredObject>::iterator iterator; 
typedef vector<registeredObject>::const_iterator const_iterator; 
vector<registeredObject>::iterator begin(void); 
vector<registeredObject>::const_iterator begin(void) const; 
vector<registeredObject>::iterator end(void); 
vector<registeredObject>::const_iterator end(void) const; 

Je reçois des erreurs telles que:

.: error: ISO C++ forbids declaration of 'vector' with no type 
.: error: expected ';' before '<' token 

pour chacune des utilisations ci-dessus du vecteur. Ce code compile dans CodeWarrior plus ancien, mais XCode se plaint. Quelle est la solution?

Y at-il une bonne référence?

[EDIT] Voici l'en-tête ensemble Here

+0

Quelles lignes spécifiques obtiennent les erreurs. – jmucchiello

Répondre

13

vector est dans l'espace de noms std:

typedef std::vector<registeredObject>::iterator iterator; 

Aussi, pourquoi vous définissez ces types alors ne les utilisez pas?

typedef std::vector<registeredObject> container; 
typedef container::iterator iterator; 
typedef container::const_iterator const_iterator; 

iterator begin(void); 
const_iterator begin(void) const; 
iterator end(void); 
const_iterator end(void) const; 

Considérez également que peut-être vous n'avez pas défini registeredObject. Essayez avec int pour vous assurer.


Maintenant que nous voyons registeredObject est un paramètre de modèle, vous avez besoin typename:

typedef typename std::vector<registeredObject> container; 
typedef typename container::iterator iterator; 
typedef typename container::const_iterator const_iterator; 

Here's why. Ne pas oublier les autres, cependant. Vous avez toujours besoin de std::, et d'utiliser réellement vos types définis. (Cela doit être réparé dans vos deux classes.)

Notez qu'il est beaucoup plus commun d'utiliser T comme type de modèle. Il est alors aussi commun d'être généreux avec vos typedef « s:

typedef T value_type; 
typedef std::vector<value_type> container; 
typedef typename container::iterator iterator; 
typedef typename container::const_iterator const_iterator; 

et les utiliser dans votre classe. (À savoir, utiliser container mRegistryList; à la place)

+0

@Gman - pas sûr que je comprends que mettre std :: avant l'utilisation de vecteur ne semble pas fonctionner non plus. J'ai posté le lien vers la classe ci-dessus.Je pense que ce sont les modèles qui me déroutent. –

0

est-registeredObject déclarée? Avez-vous inclus RegisteredObject.h?

0

Si je devais deviner, je dirais que le type registeredObject est défini dans un fichier quelque part, mais n'est pas inclus dans ce fichier d'en-tête.

Un fichier .CPP peut arriver à inclure RegisteredObject.h avant MyIteratorDeclarations.h et cela fonctionnerait. Mais alors un autre fichier pourrait simplement inclure MyIteratorDeclarations.h, ce qui produirait alors une erreur.

Pour l'instant, le code fourni est insuffisant pour être sûr. Peut-être pouvez-vous changer votre exemple pour afficher tout le contenu du fichier d'en-tête jusqu'à la première erreur.

+0

@Andrew: J'ai posté la classe sous forme de fichier txt dans le lien ci-dessus. –

Questions connexes