Forum de la communauté SFML

Aide => Système => Discussion démarrée par: Shadwk le Avril 16, 2012, 10:21:29 pm

Titre: [RESOLU] sf::String génèrant un Assertion Failed
Posté par: Shadwk le Avril 16, 2012, 10:21:29 pm
Bonsoir,

Je me permets de vous donner un code minimal qui plante pour une raison que je n'explique pas...
Mon environnement est Visual Studio 2010 et je viens de tester le code ci-dessous avec le dernier snapshot de SFML 2.0 et j'ai toujours mon problème...

J'ai prit le code d'exemple pour la SFML 2. J'ai rajouté une classe contenant un sf::String et un getter retournant le texte du String. Le but au final était d'avoir un input text (ce qui fonctionne bien) le problème vient du fait que je ne peux  pas récupérer avec mon getter le contenu du sf::String...

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
 
class MaString
{
        private:
                sf::Text textLabel;
        public:
                MaString() { textLabel.setString("AAAAA"); }
                ~MaString() {}

                std::string text() { return textLabel.getString().toAnsiString(); }
};

int main()
{
         //Creation de l'objet
         MaString test;
     //Create the main window
     sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
     //Load a sprite to display
     sf::Texture texture;
     if (!texture.loadFromFile("cute_image.jpg"))
         return EXIT_FAILURE;
     sf::Sprite sprite(texture);
     //Start the game loop
     while (window.isOpen())
     {
         //Process events
         sf::Event event;
         while (window.pollEvent(event))
         {
             // Close window : exit
             if (event.type == sf::Event::Closed)
                 window.close();
         }
         //Clear screen
         window.clear();
         //Draw the sprite
         window.draw(sprite);
                 //Essayer de recuperer le string
                 printf("%s\n", test.text().c_str());
         //Update the window
         window.display();
     }
     return EXIT_SUCCESS;
}
 

Pour le moment j'ai résolu mon problème en stockant un std::string et en lui faisant subir tout ce que le sf::String subit en transformation. Mais si je peux arriver à faire mieux avec votre aide pour économiser un peu de mémoire ce serait cool !

Je vous en remercie d'avance :)

Shadwk



Titre: Re : sf::String génèrant un Assertion Failed
Posté par: Laurent le Avril 16, 2012, 10:24:17 pm
Et c'est quoi l'erreur ? Ca se passe où ?

Tu as compilé SFML toi-même ?
Titre: Re : sf::String génèrant un Assertion Failed
Posté par: Shadwk le Avril 16, 2012, 10:41:21 pm
Je viens de recompiler tout de zéro en resuivant le tutorial (comme la première fois) avec le dernier snapshot. Seule l'option BUILD_SHARED_LIBS est coché et il semblerait que cela ne fonctionne pas mieux (J'avais auparavant STATIC_STD_LIBS de coché).

L'erreur en voici une screenshot ci-dessous en pièce jointe. J'ai affiché ce que la console affiche car la ligne "printf("%s\n", test.text().c_str());" fonctionne c'est après que cela se complique visiblement...

[attachment deleted by admin]
Titre: Re : sf::String génèrant un Assertion Failed
Posté par: Laurent le Avril 17, 2012, 07:51:08 am
Ok, et bien appuie sur "Recommencer" et vois ce que dit le debugger.

Citer
J'avais auparavant STATIC_STD_LIBS de coché
Je confirme qu'il ne faut pas. Assure-toi bien que tout est recompilé complètement (Rebuild all) après que tu aies changé cette option.
Titre: Re : sf::String génèrant un Assertion Failed
Posté par: Shadwk le Avril 17, 2012, 08:45:43 pm
C'est bon le problème est résolu !
Merci beaucoup pour ton aide.

Shadwk