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 :

manipuler un vector de type "classe"


Sujet :

C++

  1. #61
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      nomImage = (char*)stringNomImage.c_str();
      imageSurface = IMG_Load(nomImage);
    Pourquoi t'obstines-tu à caster en char* non-const? J'ai vérifié, IMG_Load() accepte un const char *!

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char const * tmpNomImage = stringNomImage.c_str();
    imageSurface = IMG_Load(tmpNomImage);
    Pas besoin de cast!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #62
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Kalemiro Voir le message
    ...
    Manifestement l'image est trouvée, et le format est géré
    Peut-être quand tu lis je ne sais quelle donnée dans application.txt qui se trouve je ne sais où sur ton disque, mais faut-il rappeler ton code initial ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		for(unsigned int i = 0; i<nbApp; ++i)
    		{
    			getline(fichier, commande);
    			getline(fichier, icone);
    			nomIcone = (char*)icone.c_str(); //Conversion des string en char* pour les paramètres du constructeur
    			commandeIcone = (char*)commande.c_str();
    			tabIcone.emplace_back(affichage, 0, 0, 0, 20*i, (maxH/10)+20, commandeIcone, nomIcone); //Constructeur
    		}
    Où le nombre d'inconnus est si grand qu'on peut juste... rien en faire de notre côté en fait.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #63
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Peut-être quand tu lis je ne sais quelle donnée dans application.txt qui se trouve je ne sais où sur ton disque, mais faut-il rappeler ton code initial ? (code) Où le nombre d'inconnus est si grand qu'on peut juste... rien en faire de notre côté en fait.
    Je pense qu'entre mon message initial et la 4ème page de ce topic j'ai collé assez de bout de conde voir de code entier pour que toutes ces inconnues aient un sens pour vous, encore faut-il tout lire et ne pas s'y perdre. Pas besoin de rappeler mon code initial, je m'en souviens très bien

  4. #64
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Toi oui, mais nous autre, pas forcément.
    De notre côté, nous t'avons donné assez d'explications et de justifications pour que tu essaies de corriger ton programme.
    En l'occurence, quand tu as deux problèmes, et que l'un est simple à résoudre, c'est lui qu'il faut résoudre en premier. Il pourrait être la cause de l'autre problème.

    Corrige ta gestion mémoire, en la protégeant (RAII), et ca devrait aller beaucoup mieux à débugger.

  5. #65
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    C'est pas la RAII le problème, j'ai essayé de charger une image sans utiliser ma classe en lisant le fichier texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        for(unsigned int i = 0; i<nbApp; ++i)
        {
          getline(fichier, icone); //Je récupere chaque ligne du fichier
     
     
     
     
          char const * tmpNomImage = icone.c_str(); //Je ne cast plus en char* non-const à la demande générale
          iconeImageSurface = IMG_Load(tmpNomImage); //Chargement de l'image
     
          if(!iconeImageSurface) // Si le chargement à échouer affichage de l'erreur
            std::cout << "IMG_Load: " << IMG_GetError() << std::endl;
        }
    et le résultat dans la console est:
    IMG_Load: Couldn't open Kodi.png
    IMG_Load: Couldn't open Epiphany.png

    j'ai essayé avec les chemins absolus, en les mettant dans un autre dossier ... ... ca ne marche pas

  6. #66
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Kalemiro Voir le message
    Je pense qu'entre mon message initial et la 4ème page de ce topic j'ai collé assez de bout de conde voir de code entier pour que toutes ces inconnues aient un sens pour vous, encore faut-il tout lire et ne pas s'y perdre. Pas besoin de rappeler mon code initial, je m'en souviens très bien
    - mon travail ne consiste pas à corriger ton exercice
    - désolé de ne parvenir à deviner ce que contient application.txt qui fonctionne chez toi d'après ce que tu dis
    - désolé de ne parvenir à deviner ce que contient fichier que tu lis (peut-être mal) pour extraire un path et une commande (wtf cette "commande" ?) qui ne donne aucun résultat
    - tout ce qu'on sait, depuis seulement quelques postes, c'est que les paths que tu y lis sont Kodi.png & Epiphany.png qui, s'ils sont bien des images png (parce que le nom d'un fichier n'a jamais été probant sur son contenu), devraient fonctionner
    - pourtant IMG_Load te retourner un pointeur NULL parce qu'il ne sait pas les charger
    - ou ne les trouve tout simplement pas
    - mais comme on ne sait rien de ton arborescence, où se trouve l'exe, les images ni quoi que ce soit..
    - et on ne connait toujours pas ce que IMG_GetError t'indique, qui sera plus à-même de savoir où se trouve l'erreur et l'indiquera certainement

    edit:
    IMG_Load: Couldn't open Kodi.png
    IMG_Load: Couldn't open Epiphany.png
    Ben voilà, tu pourras écrire le code que tu veux, si les fichiers sont pas trouvés, il les chargera jamais.
    Vérifie les paths de tes ressources et d'exécution. Les / et \ etc.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #67
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Bousk-> Ton travail ne consiste pas à corriger mon exercice ? Ca tombe bien ce n'est pas ce que j'ai demandé, j'ai juste demandé un peu d'aide, maintenant si toi (ou n'importe qui) n'a ni le temps, ni l'envie, ni les compétences rien ne t'oblige à me venir en aide.
    -> Le fichier application.txt à été décrit au début, mais je te le remet ici: https://i.gyazo.com/57e0b36afc84dc7e...e29a886554.png
    -> Au post numéro 15 on peut voir quel fichier je lis, pour t'éviter d'y retourner je le remet ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::ifstream fichier("application.txt");
    	if(fichier)
    	{
    La suite tu l'as déjà vue je ne la remet pas
    La commande (wtf) dont tu parle à disparue en cours de route afin d'alléger car ma question est seulement sur les fichier images, mais cette commande représente ce qu'il faut écrire sur une console linux afin d'ouvrir par exemple le média center "Kodi"
    -> Les paths que j'y lis lors du premier message lorsque j'ai expliqué le contenu du fichier txt, ce sont bien Kodi.png et Epiphany.png qui sont des fichier images de type PNG
    -> voici l'arborescence ou se trouve mon .exe: /home/clement/ptut/Test/
    et les images se trouvent dans: /home/clement/ptut/Test/img
    Cependant l'emplacement des images a beaucoup changé afin de faire des tests, il était auparavant dans le même dossier que l'exe (/home/clement/ptut/Test/)


    Ben voilà, tu pourras écrire le code que tu veux, si les fichiers sont pas trouvés, il les chargera jamais.
    j'aurai tendance à te dire un "thank's captain" mais ca ne se fait pas par respect, mais je me doute bien que si il ne peut pas les ouvrir c'est qu'il ne les trouve pas

    j'ai essayé avec les chemins absolus, en les mettant dans un autre dossier ... ... ca ne marche pas
    et j'ajoute que j'ai aussi essayé en mettant des / et des \

    J'espère avoir répondu correctement à toutes tes questions

  8. #68
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Du calme.

    Donc, tu as dans le même dossier le binaire et les deux images?
    Peux tu remplacer l'intégralité de ton main par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main() {
    SDL_surface* s = IMG_Load("Kodi.png");
    if(!s) std::cerr<< "IMG_Load: " << IMG_GetError() << std::endl;
    else SDL_FreeSurface(s);
    return 0;
    }
    Compile et exécute.

  9. #69
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    J'ai utilisé ton code, il semblerait qu'on ne puisse pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_surface* s = IMG_Load("Kodi.png");
    , ca donne une erreur de compilation donc je l'ai fait en 2 lignes.

    Ce code marche, aucune erreur n'est retournée sur la console, j'ai même ajouté une ligne pour lire ce qui est contenu dans "s" et c'est bien une adresse mémoire. J'ai aussi essayé avec une autre image ca marche, le n'est pas obligatoire (même si je sais qu'une ressource alloué doit être libérée) j'ai juste testé sans pour voir si ca changé quelque chose.

    Je suis perplexe

  10. #70
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Donc, tu as un problème plus complexe.

    Supprime de ton code qui pose problème tout ce que tu peux, pour avoir un code minimal reproduisant le problème.
    Idéalement, tu aurais juste le remplissage du vecteur et son affichage, ainsi que la définition de Icone.

    Quand c'est fait, montre nous ce code, qu'on regarde un peu.

    Ca pourrait aussi venir du contenu du fichier, dont on ne sais pas s'il contient des caractères invisibles (blancs, tabulations, \r, voire sub)

  11. #71
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Le code minimale ne contient même plus de classe icone

    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    int main()
    {
      std::ifstream fichier("application.txt");
      int nbApp;
      SDL_Surface* iconeImageSurface;
      if(fichier)
      {
     
        std::string strNbApp; //String contenant le nombre d'application (juste des noms d'images du coup) lu dans le fichier
        getline(fichier, strNbApp); //Je récupère la premiere ligne = nombre d'app
        if(!(std::istringstream(strNbApp) >> nbApp) ) nbApp = 0; //Conversion du string
        std::cout << "nb app: " << nbApp << std::endl;
        for(unsigned int i = 0; i<nbApp; ++i)
        {
          getline(fichier, icone); //Je récupère les lignes suivantes (nom des images)
          char const * tmpNomImage = icone.c_str(); //Conversion en const char*
          iconeImageSurface = IMG_Load(tmpNomImage); //Chargement
     
          if(!iconeImageSurface)
            std::cout << "IMG_Load: " << IMG_GetError() << std::endl; //Affichage du message d'erreur
        }
     
      }
     
     
      return EXIT_SUCCESS;
    }
    Vous pouvez télécharger ici le fichier texte:
    application.txt

    le resultat dans la console:
    Nom : 5d1f043997c7dd49b98bf193228054e7.png
Affichages : 310
Taille : 18,2 Ko


    Et j'ai bien les images dans le dossier

  12. #72
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et j'ai bien les images dans le dossier
    Lisibles?
    Est-ce qu'un ifstream(tmpNomImage) marche?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #73
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    tant que tu y es, que donne un ls -l?

    est-ce que tu as les droits, et ton programme?

  14. #74
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Voici le résultat de ls -l:

    Nom : 5986435d2505b927d01ba3e083d75f32.png
Affichages : 227
Taille : 16,4 Ko


    Médinoc: Je le met ou le ?
    Si je le met dans la boucle for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        for(unsigned int i = 0; i<nbApp; ++i)
        {
          getline(fichier, icone);
     
     
     
         char const * tmpNomImage = icone.c_str();
         std::ifstream(tmpNomImage);
     
          iconeImageSurface = IMG_Load(tmpNomImage);
     
          if(!iconeImageSurface)
            std::cout << "IMG_Load: " << IMG_GetError() << std::endl;
        }
    Ca ne compile pas, tmpNomImage previous declaration.

    Si je le met après la boucle ca compile, et le résultat dans la console est le même que sans cette ligne

  15. #75
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et comme ceci?
    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
    17
    18
    for(unsigned int i = 0 ;  i<nbApp ;  ++i)
    {
    	getline(fichier, icone);
     
    	char const * tmpNomImage = icone.c_str();
    	{
    		std::ifstream stm(tmpNomImage);
    		if(stm)
    			std::cout << "Le stream a réussi à ouvrir l'image." << std::endl;
    		else
    			std::cout << "Le stream a échoué dans l'ouverture de l'image." << std::endl;
    	}
     
    	iconeImageSurface = IMG_Load(tmpNomImage);
     
    	if(!iconeImageSurface)
    		std::cout << "IMG_Load: " << IMG_GetError() << std::endl;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #76
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Y'a du nouveau, attention c'est limite du paranormal.

    J'ai crée un nouveau fichier texte (d'un coup de rage) que j'ai appellé lel.txt (en panne d'inspiration) dans lequel j'ai mit qu'un seul chemin d'icone.

    Nom : 2e346c64992a3b7239e4e31e7fadfe21.png
Affichages : 136
Taille : 3,6 Ko

    Et ben figurez-vous que ca marche j'ai une icone qui s'affiche

    Si vous avez une idée de la raison ? Parce que la franchement je commence à me demander si mon ordi n'essais pas de me troller.

    Mais (oui il faut absolument un mais) lorsque je met 2 icones ca n'en affiche qu'une et ca met dans la console:
    iconeSurface: 0x2067150 surface source: 0x20553c0 x,y:0,0 pathIcone: Kodi.png
    iconeSurface: 0x20670c0 surface source: 0x20553c0 x,y:20,20 pathIcone: Epiphany.png
    *** Error in `./test': free(): invalid pointer: 0x0000000002067150 ***
    Abandon (core dumped)

    probablement parce que je n'ai pas libéré la ressource ou je ne sais pas ?


    Edit: je crois avoir trouvé la raison du pourquoi ca ne marchait pas depuis le début, j'ai crée le fichier .txt sur windows, et j'éxécute mon code sur xubuntu, les fichiers .txt sont peut etre différents entre ubuntu et windows ?
    Le but final est de le faire marcher sur un raspberry-pi utilisant raspbian, est ce que je vais retrouver le même problème si je crée le fichier texte sur xubuntu et que j'éxecute mon programme sur le rasp ?

  17. #77
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Les sauts de ligne sur Windows sont représentés par \r\n alors que sur Linux seul \n suffit. Si tes fichiers ne contiennent pas \r, c'est normal qu'ils ne soient pas trouvés. Un petit cat -e lefichier pour le vérifier et un coup de sed s'/\r$//g' -i lefichier pour corriger.

  18. #78
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ah oui, et vu que c'était un \r seul (le \n ayant été supprimé par getline()), et que le message d'erreur n'affichait rien après le nom de fichier, ça passait inaperçu... On aurait entouré le nom de fichier de guillemets, on aurait eu un symptôme...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #79
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Mon erreur à donc été résolue, merci à vous ce genre d'erreur est horrible on aurait pu y rester encore longtemps dessus

    J'en profite pour donner 2-3 infos en plus, en page 2 leternel m'a indiqué
    Tu m'étonnes de ne rien voir.

    On ne charge pas une image au moment de la dessiner.
    Donc j'ai décidé de charger l'image dans mon constructeur et de rajouter une donnée membre iconeSurface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Icone::Icone(SDL_Surface* _affichage, int _x, int _y, std::string _pathIcone)
            :affichage(_affichage), x(_x), y(_y), pathIcone(_pathIcone)
    {
      SDL_Surface* iconeSurface;
      iconeSurface=IMG_Load(getPathIcone()); //On charge l'image lors de l'appel du constructeur
      if(!iconeSurface)
      {
        std::cout << "IMG_Load: " << IMG_GetError << std::endl;
      }
     
    }
    Il semblerait que cela produise de grosses erreurs de mémoire, erreur de segmentation (code dumped). Je n'ai pas réussi à résoudre ces erreur en utilisant valgrind donc j'ai décidé de reprendre mon ancienne méthode (peut etre pas belle) de charger l'image dans l'appel de la fonction dessin, chose qui marche.

    Je pense laisser ca comme ca puisque une première version du projet est a rendre jeudi et qu'il me reste encore pas mal de fonctions à écrire, mais je rejeterai un oeil après sur ce chargement d'image.

    Je vous remercie encore d'avoir prit le temps de m'aider

  20. #80
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Ben c'est joli, tu charges ton iconeSurface dans le constructeur, mais comme tu ne la stockes pas, non seulement il faudra que tu la recharges par la suite, mais en plus tu leakes la ressource créée par IMG_Load...
    Stocke la surface dans ton icone, ou mieux, commence à penser à un resource manager qui stockerait les images que tu as chargées, et au moment du dessin, ton icône demandera à ce resource manager l'image qu'il faut qu'elle affiche.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

+ Répondre à la discussion
Cette discussion est résolue.
Page 4 sur 4 PremièrePremière 1234

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