Problème avec les Vectors ( return ((vector<_Key>::iterator)NULL;)

Problème avec les Vectors ( return ((vector<_Key>::iterator)NULL;) - C++ - Programmation

Marsh Posté le 21-01-2006 à 16:21:24    

(Re) bonjour,
 
Étant en période de découverte des vectors j’ai encore quelques problèmes :
 
Une de mes fonction retourne un iterator :  
 

Code :
  1. vector<_Key>::iterator _Sprite_Data::OnKey(float time)
  2. {
  3. vector<_Key>::iterator it = this->KeyUnder(time);
  4. if(it->Time==time)
  5.  return it;
  6. else
  7.  return NULL;
  8. }


 
Mais voila le problème que je ne sais pas résoudre :
Je voudrais qu’en cas d’erreur la fonction me retourne un NULL que je pourrais ensuite comparer comme un pointeur.
Du type :
 

Code :
  1. vector<_Key>::iterator itKey =  Sprite_Data.OnKey(time);
  2. if(itKey ==NULL)
  3. {
  4. …
  5. }


 
 
Mais VS8 me retourne une erreur (alors que VS6 ne posais pas de problème) :  
 

Code :
  1. sprite.cpp(144) : error C2664: 'std::_Vector_iterator<_Ty,_Alloc>::_Vector_iterator(const std::_Vector_iterator<_Ty,_Alloc> & )' : cannot convert parameter 1 from 'int' to 'const std::_Vector_iterator<_Ty,_Alloc> &'
  2.         with
  3.         [
  4.             _Ty=_Key,
  5.             _Alloc=std::allocator<_Key>
  6.         ]
  7.         Reason: cannot convert from 'int' to 'const std::_Vector_iterator<_Ty,_Alloc>'
  8.         with
  9.         [
  10.             _Ty=_Key,
  11.             _Alloc=std::allocator<_Key>
  12.         ]
  13.         No constructor could take the source type, or constructor overload resolution was ambiguous


 
Je ne sais vraiment pas comment faire donc si quelqu’un s’y connais un peu en vectors :), j’ apprecierais beaucoup son aide.
 
Merci d’avance.

Reply

Marsh Posté le 21-01-2006 à 16:21:24   

Reply

Marsh Posté le 21-01-2006 à 18:11:28    

un iterator c'est pas un pointeur. si tu veux indiquer rien, tu retournes v.end()

Reply

Marsh Posté le 22-01-2006 à 01:51:02    

Tu te ramollies :o, t'as même pas pisser dans les tripes du PO parce qu'il avait utilisé un nom réservé :o :D
 
( ^_[_A-Z] au moins est réservé à l'implémentation )
 
le type vector<>::iterator est défini par l'implémentation. VS6, malgré que ce soit une bouze finie, a tout à fait le droit de faire en sorte que l'iterator soit en réalité un pointeur.
 
Sinon, je ne sais pas comment tu vas utiliser ton iterateur ainsi que ton conteneur sous jaçant, mais méfies toi des conditions d'invalidation de l'iterateur.

Message cité 1 fois
Message édité par ++fab le 22-01-2006 à 10:36:16
Reply

Marsh Posté le 22-01-2006 à 11:17:16    

++fab a écrit :

Tu te ramollies :o, t'as même pas pisser dans les tripes du PO parce qu'il avait utilisé un nom réservé :o :D
 
( ^_[_A-Z] au moins est réservé à l'implémentation )


je laisse tomber ça et les include guards, y a vraiment des gens trop stupides qui utiliseront toujours STACK_H, qui foutront des _ dans tous les sens et préfixeront tout en C ou T parce que MS et Borland le font ...

Reply

Marsh Posté le 22-01-2006 à 12:14:18    

Taz a écrit :

je laisse tomber ça et les include guards, y a vraiment des gens trop stupides qui utiliseront toujours STACK_H, qui foutront des _ dans tous les sens et préfixeront tout en C ou T parce que MS et Borland le font ...


 
pour les IG, c'est stupide d'en faire des courts et commun, mais j'en ai franchement marre d'avoir à gérer un nom unique. Faut dire que j'ai toujours pas pris la peine de m'écrire une fonction e-lisp pour me gérer ça dans emacs  [:petrus75]  
Bref, les IG, je trouve ça de plus en plus préhistoriques ... Vivement les namespace >> et al.

Reply

Marsh Posté le 22-01-2006 à 17:42:55    

e-lisp, IG, STACK_H C quoi tout ça ???
Et de plus quels est le problème avec mon nom de structure ???
_Sprite_Data
Perso je met toujour un _ devant une stucture...

Reply

Marsh Posté le 22-01-2006 à 18:09:01    

les noms commencant par '_' suivi d'une majuscule ou commencant par '__' sont réservés à l'implémenation, tu peux mettre un '_' devant mais suivie d'une minuscule

Reply

Marsh Posté le 22-01-2006 à 18:09:28    

Lereveur a écrit :

e-lisp, IG, STACK_H C quoi tout ça ???


e-lisp : un truc d'emacsien, IG : include guards, STACK_H est l'exemple d'un include guard trop souvent employé et pas assez unique.

Lereveur a écrit :

Et de plus quels est le problème avec mon nom de structure ???
_Sprite_Data
Perso je met toujour un _ devant une stucture...


( ^_[_A-Z] au moins est réservé à l'implémentation )

Reply

Marsh Posté le 22-01-2006 à 18:18:00    

skelter a écrit :

tu peux mettre un '_' devant mais suivie d'une minuscule


Si le nom n'est pas dans la scope globale.
 
Je ne comprend pas l'intérêt qu'il y a à rendre un nom dégueulasse en préfixant par '_'. Si on a réservé à l'implémentation ces noms, c'est qu'il a été jugé qu'ils étaient les plus laid, et que les utilisateurs n'en auraient pas crucialement besoin.

Reply

Marsh Posté le 22-01-2006 à 18:20:28    

skelter a écrit :

les noms commencant par '_' suivi d'une majuscule ou commencant par contenant  '__' sont réservés à l'implémenation


Reply

Marsh Posté le 22-01-2006 à 18:20:28   

Reply

Marsh Posté le 22-01-2006 à 18:29:23    

je comprends pas, je traduis ce que tu ecris (^_[_A-Z]), ta qu'a le dire si en réalité c'est (^_.*|.*__.*)

Reply

Marsh Posté le 22-01-2006 à 18:38:22    

j'ai dit "^_[_A-Z] au moins" pour ne pas avoir a me prendre la tete avec une regexp compliquée :)

Reply

Marsh Posté le 23-01-2006 à 08:38:44    

++fab a écrit :

j'ai dit "^_[_A-Z] au moins" pour ne pas avoir a me prendre la tete avec une regexp compliquée :)


Et pour trouver les recommandations détaillées sur ce point, il faut aller où ?

Reply

Marsh Posté le 23-01-2006 à 19:53:54    

slash33 a écrit :

Et pour trouver les recommandations détaillées sur ce point, il faut aller où ?


Dans la norme, rubrique 17.4.3.1 et suivantes.
Sinon, il y a un gotw qui en parle, je ne sais plus lequel.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed