Voilà avec SFML je voulais créer une classe simple pour créer des boutons. Je crée juste un rectangle sur lequel j'affiche du texte pour l'instant mais quand je teste le programme ça me dit "Exception levée à 0x0F6D49EF (sfml-graphics-d-2.dll) dans testBouton.exe : 0xC0000005 : Violation d'accès lors de la lecture de l'emplacement 0xCCCCCCD0."
Il m'indique une erreur au niveau du texte, pourtant j'ai les bons dlls dans mon projet et quand je créer le bouton directement dans le main sans passer par une classe ça marche très bien. Je ne comprend donc pas le problème alors si vous pouvez m'aider je vous en serais reconnaissant (PS: j'utilise Visual Studio comme IDE)
main.cpp
#include <SFML/Graphics.hpp>
#include "Button.h"
const int WIDTH = 800;
const int HEIGHT = 600;
int main()
{
sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Test");
Button button(200, 50, "Test");
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
button.draw(window);
window.display();
}
return EXIT_SUCCESS;
}
Ce que j'aurais fait pour discriminer la fonction qui pose soucis c'est essayer de faire
m_text.setPosition(0, 0);
pour voir si le problème vient de setPosition. A l'inverse essayer d'afficher en console m_text.getLocalBounds() pour voir si les valeurs sont correctes.
ça ne change rien du tout je pige vraiment pas la :/
SI je remplace le texte par une forme ça ne pose évidement aucun problème donc il doit y avoir un problème lors de l'initialisation de la variable mais quand je fais la même chose directement dans le main ça marche, c'est à n'y rien comprendre
EDIT: Bon j'ai trouvé le problème, il venait du font déclaré dans le constructeur vu que la variable font était détruite a la fin de la construction, il a suffit de la déclarer comme attribut de la classe pour résoudre le problème et ainsi pouvoir l'utiliser dans la méthode draw()
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Je ferme ce sujet. En cas de désaccord, me contacter par MP.
...