IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Flux IFSTREAm ou SDL? La librérie MAP? D'ou vien l'éreur...


Sujet :

SDL

  1. #1
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut Flux IFSTREAm ou SDL? La librérie MAP? D'ou vien l'éreur...
    Re-Bonjours ^^
    Je passe mon temp a poser des questions mais vraiment parfois je ne voit pas du tout d'ou peut provenir les problèmes, et la je voi vraiment pas!!!

    Donc, c'est très simple, sa ce résume en quelques lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        //Definition :
        typedef std&#58;&#58;map<int, std&#58;&#58;string> Int_MAP_String;
        extern Int_MAP_String File_List;
        //Code a problème?!
        std&#58;&#58;ifstream Load&#40; &#40;SpritFileNameRep + &#40;std&#58;&#58;string&#41;"Paths.link" &#41;.c_str&#40;&#41; &#41;;
        std&#58;&#58;string Var_Temp;
        for&#40;int Iterator_ID = 1; std&#58;&#58;getline&#40;Load, Var_Temp, ';'&#41;; ++Iterator_ID&#41;
        &#123;
            File_List.insert&#40;Int_MAP_String&#58;&#58;value_type&#40;Iterator_ID, Var_Temp&#41;&#41;;
            std&#58;&#58;cerr << "\n<" << Var_Temp << "><" << File_List.end&#40;&#41;->second << ">\n";
        &#125;
    Le ficheir contien ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bg/001.bmp;bg/002.bmp;bg/003.bmp
    Le texte récupèrer dans std::cerr est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <bg/001.bmp><.bmp>
     
    <bg/002.bmp><.bmp>
     
    <bg/003.bmp><.bmp>
    Une idée d'ou vien le problème???
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    File_List.end() n'est pas un itérateur valide, tout comme le .end() de n'importe quel conteneur (il pointe après le dernier élement). Il faudra donc faire autrement, par exemple en affichant directement File_List[Iterator_ID] plutôt que de s'embêter à aller chercher le dernier élément.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Par définition, l'itérateur correspondant à end() n'est pas déréférençable.
    Le comportement de cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File_List.end&#40;&#41;->second
    est indéfini. Au mieux cela renvoie n'importe quoi, au pire cela provoque un plantage.

    EDIT: arf, coiffé sur le poteau par Loulou. Rapide le lapin ;-)
    EDIT2: supprimé l'ineptie précédente

  4. #4
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Mais alors, l'or d'un find(N) éroner, .end() est renvoiller, je doit donc faire un if(IteratorRenvoiller == Var.end()){return Var.back();} ?

    Erf : 25 E:\Project Fantasy\Game\map.cpp 'class Sprit_Map::Int_MAP_String' has no member named 'back'
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Non, j'ai fait une erreur désolé.
    back() n'existe pas pour les map. C'est la nom de la variable (File_List) qui m'a induit en erreur.

    Ce qu'il faut retenir, c'est que end() ne pointe pas sur un élément valide du conteneur quel qu'il
    soit.
    Lors d'un find où aucune valeur n'est trouvé. C'est end() qui sera retourné.
    Je ne vois pas quelle valeur tu souhaites renvoyer dans ce cas. Puisque le find n'en trouve aucune
    qui corresponde à ta recherche.

    Dans le cas de ta boucle, pour afficher le dernier élément inséré dans ta map, Loulou t'a donné la
    solution dans son post.

  6. #6
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    A ok donc pour le dernier élément c'est : File_List[File_List.end()] ou File_List[File_List.end()]->second ???

    Edit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    25 E&#58;\Project Fantasy\Game\map.cpp no match for 'operator&#91;&#93;' in 'Sprit_Map&#58;&#58;File_List&#91;&#40;&Sprit_Map&#58;&#58;File_List&#41;->std&#58;&#58;map<_Key, _Tp, _Compare, _Alloc>&#58;&#58;end &#91;with _Key = int, _Tp = std&#58;&#58;string, _Compare = std&#58;&#58;less<int>, _Alloc = std&#58;&#58;allocator<std&#58;&#58;pair<const int, std&#58;&#58;string> >&#93;&#40;&#41;&#93;' 
     note E&#58;\Dev-Cpp\include\c++\3.4.2\bits\stl_map.h&#58;332 candidates are&#58; _Tp& std&#58;&#58;map<_Key, _Tp, _Compare, _Alloc>&#58;&#58;operator&#91;&#93;&#40;const _Key&&#41; &#91;with _Key = int, _Tp = std&#58;&#58;string, _Compare = std&#58;&#58;less<int>, _Alloc = std&#58;&#58;allocator<std&#58;&#58;pair<const int, std&#58;&#58;string> >&#93;
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Il n'y a pas de dernier élément dans une map.
    Les vecteurs, les chaines, les listes etc... sont des conteneurs séquentiels. A ce titre, il y a un
    premier et un dernier élément.
    Les map sont des conteneurs associatifs. A une clef correspond au plus un élément. La notion
    de premier et dernier n'a pas de sens dans ce cadre.

    Ce que Loulou t'indiquais, c'est que si tu insères un élément avec Iterator_ID comme clef,
    tu peux le récupérer pour ton affichage via sa clef et l'opérateur []

  8. #8
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Dans ce cas, je veut considérer comme dernier élément cellui qui a la plus grande clef.
    Par exemple :
    1 Abcd
    2 Efgh
    3 Ijkl
    4 Mnop
    5 Qrst
    Comment savoir que le "dernier" élément, est Qrst(donc, que l'itérateur est Qrst) ?
    Car le code que j'ai donner est le débugage, mais je vourais que l'hors d'un find() eroner, le dernier élément soit utiliser.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est pas vraiment fait pour, mais tu peux toujours faire une bidouille de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File_List.rbegin&#40;&#41;->second;
    Sous reserve bien entendu qu'il y ait au moins un élément dans la table.

  10. #10
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    D'acord, merci ^^
    (Je sais pas ce que j'ai encore trafiquer mais je vien de faire plenter exploreur.... )
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Flux] passer un ifstream en paramètre d'une fonction
    Par yoshï dans le forum Débuter
    Réponses: 4
    Dernier message: 03/12/2009, 16h51
  2. [SDL] Probleme de map
    Par Pierra26 dans le forum SDL
    Réponses: 2
    Dernier message: 05/06/2009, 00h17
  3. [RPG 2D en SDL] Map.
    Par maxtor3569 dans le forum SDL
    Réponses: 64
    Dernier message: 28/04/2008, 14h43
  4. [SDL] Quadrillage d'une map
    Par Skymaster dans le forum SDL
    Réponses: 3
    Dernier message: 23/06/2007, 17h37
  5. [flux] héritage combiné d'ifstream et d'ofstream
    Par suizokukan dans le forum SL & STL
    Réponses: 5
    Dernier message: 08/11/2004, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo