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

C++ Discussion :

extern std:map probl�me ex�cution


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 21
    Par d�faut extern std:map probl�me ex�cution
    Bonjour, J'ai un petit probl�me � l'utilisation d'une map d�finie de cette fa�on :
    un fichier .h contient extern std::map<int,et ici un type d'une biblioth�que> Images;
    un fichier .cpp contient la m�me chose sans le extern.
    Je pr�cise que ce map appartient � un espace de nom d�fini dans le .h.
    J'utilise ce map dans le fichier .cpp...
    A la base dans mon application, l'erreur survenait quand je quittait le programme.
    J'ai r�duit � un code minimal mais rien n'y fait tant que ma d�finition du map se trouve dans un autre fichier �a plante, par contre si je d�clare directement dans le .cpp ou m�me dans le main.cpp aucune erreur.

    Merci � ceux qui sauront m'expliquer pourquoi la d�claration extern d'un std::map pose probl�me.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 21
    Par d�faut
    Svp personne n'a d'id�es concernant mon probleme ?

  3. #3
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par d�faut
    Dans le .cpp, tu as bien d�clar� ta map en l'incluant aussi dans l'espace de nom?
    Sinon, si tu nous montrais ce code minimal ainsi que le message d'erreur que �a g�n�re �a nous aiderait.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 21
    Par d�faut
    Merci d'avoir r�pondu, voila mon code en gros paske j'ai presk tout mis en commentaires donc je mets que ce qui est actif:

    Entity.h

    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #ifndef ENTITY_H
    #define ENTITY_H
     
    #include <SFML/Graphics.hpp>
     
     
    namespace Engine
    {
     
    		extern std::map<sf::Uint32,sf::Image> Images;
    		extern sf::Uint32 Images_Number;
     
    /* plus les déclarations de classes*/
    }
     
    #endif

    Entity.cpp

    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #include "Entity.h"
     
    std::map <sf::Uint32,sf::Image> Engine::Images;
    sf::Uint32 Engine::Images_Number=0;
     
    /*définitions fonctions membres des classes*/

    main.cpp

    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "Entity.h"
    #include <SFML/Graphics.hpp>
    #include <iostream>
     
    int main()
    {
    	std::string f;
    	Engine::Terrain plain("sprite_model_6.png");
     
    	std::cin >> f;
     
    return EXIT_SUCCESS;
    }

    Sachant que mon construteur ne fait juste que :

    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    sf::Image Temp;
    Images[0] = Temp;

    Si je met tout dans le m�me header tout marche...

    Voila si vous avez d'autres questions je guette le forum

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 21
    Par d�faut
    Petite pr�cision zais_ethael, m�me si je mets ce que tu m'as dit

    namespace Engine
    {
    std::map <sf::Uint32,sf::Image> Images;
    std::Uint32 Images_Number = 0;
    }

    j'obtiens la m�me erreur qui est du genre "la m�moire ne peut pas �tre read"

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 21
    Par d�faut
    Du nouveau, j'arrive � faire marcher tout �a, mais c'est tr�s �trange (ou alors quelque chose m'�chappe)

    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    Set_Type(Get_Images_Number());		
    	sf::Image Temp;	
    	std::pair <std::map<sf::Uint32,sf::Image>::iterator,bool> k = Images.insert(std::make_pair(Get_Type(),Temp));
    	if(k.second)
    		std::cout << "OK";
    	else
    		std::cout << "ERROR";
    	Images.clear();

    voila le code de mon constructeur, si j'efface tous les �l�ments l'ex�cution se termine normalement, sinon elle �choue...
    Mais dans tous les cas l'insertion s'effectue correctement.
    Ce qui m'indique qu'apr�s l'utilisation d'un map il faut effacer tous les �l�ments ?
    Bizarre bizarre...
    Y a t'il un expert de la stl parmi vous ? lol

  7. #7
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par d�faut
    Pour ton probl�me je ne vois pas, d�sol�. A la rigueur il se peut qu'il s'agisse d'un probl�me de d�pendances statiques (en C++, tout ce qui est variables globales ou statiques est fort fort mal g�r�, cela peut conduire � des bugs assez inexplicables, c'est pour cela qu'on �vite autant que possible de les utiliser). Ici �a ne devrait normalement pas �tre le cas mais il se pourrait que les variables statiques de la SFML soient d�truites avant les tiennes, et ce en admettant que le destructeur de sf::Image aie besoin de ces variables statiques (faut avoir l'esprit large - Laurent si tu es l� ).
    Tout ce que je peux te conseiller pour �tre tranquille est de laisser tomber les variables globales et statiques. Ou alors de les remplacer par quelque chose de beaucoup plus simple (genre un simple pointeur, ta map tu l'initialises sur la pile et en m�me temps tu fait pointer le pointeur statique dessus), mais dans l'absolu un bon design avec beaucoup de classes et une bonne r�partition des taches peut faire des miracles aussi .

  8. #8
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Qu'est-ce que �a donne si ta map ne contient pas des sf::Image, mais des entiers par exemple ?
    Tu dis que le code plante, si tu mets un debuger, o� le probl�me est-il ?
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 21
    Par d�faut
    Merci pour vos r�ponses, zais_ethael Laurent m'a r�pondu quelque chose de similaire je suis d�sol� d'avoir post� sur les deux forums, mais j'�tais vraiment d�sesp�r� depuis le temps.
    JolyLoic Oui a partir du moment ou je change le type, plus aucun probl�me, j'avais d�j� essay� �a vient bien du fait qu'il y a un sf::Image dedans mais surtout que mon map soit d�fini dans un source et la d�claration dans un header. Si je condense dans un m�me fichier plus aucun probl�me non plus...
    Je pensais au d�but que ma syntaxe avec extern �tait fausse je sais pas n'importe quel truc pouvait �tre la cause j'ai regard� partout mais non, �a vient bien de la lib�ration m�moire.

    Encore merci

  10. #10
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par d�faut
    Pour l'autre thread voir ici: http://www.sfml-dev.org/forum-fr/viewtopic.php?t=737
    D'apr�s Laurent c'est bien ce que je suspectais. Waw, il y avait pas une chance sur cent
    Conclusion : avec la SFML, faut pas garder une quelconque objet en statique.

  11. #11
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Attention: extern != static...

    Dans une d�claration, extern signifie simplement "cette variable existe et est d�finie ailleurs", alors que static permet de s'assurer de la liaison sur base du module dans lequel la variable est d�clar�e (et, au final, de s'assurer que tous les appels � la variables seront effectu�s sur la m�me instance de cette variable).

    Je me demande donc s'il ne serait pas au final int�ressant de travailler avec une std::map statique plut�t qu'avec une std::map externe (voire, pourquoi pas, carr�ment de mettre cette map dans un singleton)
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Discussions similaires

  1. Probl�me remplissage std::map
    Par Pixcoder dans le forum Langage
    R�ponses: 9
    Dernier message: 13/06/2009, 10h21
  2. R�ponses: 7
    Dernier message: 17/01/2009, 13h10
  3. std map probl�me r�current
    Par Champignon_atomik dans le forum SL & STL
    R�ponses: 11
    Dernier message: 03/10/2008, 17h35
  4. Probl�me de class template et std::map
    Par bathof dans le forum Langage
    R�ponses: 2
    Dernier message: 31/07/2007, 22h18
  5. Probl�me de fonction "const" avec une std::map
    Par Clad3 dans le forum SL & STL
    R�ponses: 3
    Dernier message: 02/01/2007, 12h38

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