Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exception levée

Violation d'accès lors de la lecture de l'emplacement

Sujet résolu
    28 janvier 2024 à 12:14:33

    Bonjour à tous, je veux faire un programme en SFML 2 mais j'ai un souci lors de l'affichage via la fonction: 
    fenetre.draw(text);

     Mon code est question est: 

    #include <SFML/Graphics.hpp>
    #include <iostream>
    #include <string>
    
    using namespace sf;
    using namespace std;
    
    const int WIN_HAUT = 800;
    const int WIN_LARG = 1600;
    
    Text setText(int CharS, Color color, Font font, string str, Vector2f pos);
    
    int main()
    {
    	Font police;
    	Color noir = Color::Black;
    	Text nom;
    
    	RenderWindow fenetre(VideoMode(WIN_LARG, WIN_HAUT, 64), "Team Volley");
    
    	police.loadFromFile("ressources/poppins.ttf");
    
    // Methode 1
    	nom.setCharacterSize(20);
    	nom.setFillColor(noir);
    	nom.setFont(police);
    	nom.setString("Nom du Joueur(euse):");
    	nom.setPosition({ 100,60 });
    //Methode 2
    	nom = setText(20, noir, police, "Nom du Joueur(euse):", { 100,60 });
    
    	while (fenetre.isOpen())
    	{
    		fenetre.clear(Color::White);
    		fenetre.draw(nom);
    		fenetre.display();
    	}
    
    	return 0;
    	
    }
    
    
    Text setText(int CharS, Color color, Font font, string str, Vector2f pos)
    {
    	Text t;
    	t.setCharacterSize(CharS);
    	t.setFillColor(color);
    	t.setFont(font);
    	t.setString(str);
    	t.setPosition(pos);
    
    	return t;
    }


    Mon problème arrive quand je peux utilisé la methode 2 qui est :

    nom = setText(20, noir, police, "Nom du Joueur(euse):", { 100,60 });

    autrement dit de set up les caractéristiques de ma variable de type Text via la fonction setText.

    Lorsque je fais ça, voila le message que l'ordi m'affiche: 

    Ce message n'est pas une erreur de compilation ( càd qui ne m'enpêche pas de compiler) mais je crois que c'est une erreur au moment de débogage (même si je ne suis pas sur de moi) 

    Cependant, lorsque j'utilise la méthode 1 en faisant le setup de mon text directement dans mon main, il n'y a aucun souci.. 

    Je me suis demandé si le pb venais pas de l'installation de la SFML mais j'ai regardé, j'utilise bien visual studio 17 64bit et j'ai telecharger la SFML pour cette version. 

    Si quelqu'un a une idée je suis preneur

    Merci d'avance

    Pierre

    • Partager sur Facebook
    • Partager sur Twitter
      28 janvier 2024 à 15:55:39

      Bonjour,

      La fonction setFont() va garder une référence à la fonte transmise.

      Dans la méthode 1, t.setFont(police) va référencer Font police; qui ne disparaît qu'à la fin de main().
      Dans la méthode 2, t.setFont(font) va référencer le paramètre Font font qui disparaît dès que la fonction setText() se termine.

      En passant à la fonction la fonte par référence, cela devrait changer les choses.

      Text  setText( int CharS, Color color, Font const& font, string const& str, Vector2f pos );

      t.setFont(font) va transmettre la référence à font, lui même étant une référence à police, qui ne disparait qu'à la fin de main().

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        28 janvier 2024 à 16:23:22

        Merci Beaucoup, problème réglé 

        Je m'attendais a qqch de bcp plus technique mais c'est vrai que je ne sais pas encore quand passé par référence ou non..

        bonne journée

        • Partager sur Facebook
        • Partager sur Twitter
          28 janvier 2024 à 21:34:29

          PierreBillaud2 a écrit:

          mais c'est vrai que je ne sais pas encore quand passé par référence ou non..

          Pour faire simple: tous le temps.
          Et je dirait même, par défaut, des références constantes.

          • Partager sur Facebook
          • Partager sur Twitter

          Exception levée

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown