Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problèmes avec les vecteurs

Sujet résolu
    8 juillet 2007 à 21:17:57

    Bonjour, comme je l'ai mis dans le titre, j'ai un problème avec les vecteurs. Mon objectif ici étant de gérer un inventaire.

    Objet.h :
    class Objet
    {
        public:
        Objet(std :: string nom, int quantite,int puissance);






        private:
        std :: string m_nom;
        int m_quantite;
        int m_puissance;




    };
     


    Main.cpp :

    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include <string>
    #include <stdlib.h>
    #include <iostream>
    #include <vector>
    #include "Objet.h"

    using namespace std;

    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *texte = NULL, *fond = NULL;
        SDL_Rect position;
        SDL_Event event;
        TTF_Font *police = NULL;
        SDL_Color couleurNoire = {0, 0, 0};
        int continuer = 1;



    // C'est ici que j'ai besoin de votre aide :


       vector <Objet> inventaire;
       inventaire.push_back(new Objet("Exemple", 3, 10));

     

    // C'est ici que j'ai plus besoin de votre aide XD


        SDL_Init(SDL_INIT_VIDEO);
        TTF_Init();

        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Test du projet RPG", NULL);
        SDL_WM_SetIcon(SDL_LoadBMP("images/icone.bmp"), NULL);
        fond = SDL_LoadBMP("images/image.bmp");


        police = TTF_OpenFont("sylfaen.ttf", 65);
        TTF_SetFontStyle(police, TTF_STYLE_UNDERLINE);
        texte = TTF_RenderText_Blended(police, "Simulation RPG", couleurNoire);

        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
            }

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

            position.x = 0;
            position.y = 0;
            SDL_BlitSurface(fond, NULL, ecran, &position);

            position.x = 130;
            position.y = 20;
            SDL_BlitSurface(texte, NULL, ecran, &position);
            SDL_Flip(ecran);
        }

        TTF_CloseFont(police);
        TTF_Quit();

        SDL_FreeSurface(texte);
        SDL_Quit();


        return EXIT_SUCCESS;
    }
     
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      8 juillet 2007 à 21:25:33

      Tu aurais pu être plus précis sur ton problème, mais bon :-° .

      Quel est le type que renvoie new Objet(...) ?
      Objet*.
      Donc tu ne dois pas créer un vecteur d'Objet mais un vecteur d'Objet*.

      vector <Objet*> inventaire;
      inventaire.push_back(new Objet("Exemple", 3, 10));


      Ensuite, tu as utilisé new, donc il doit y avoir un delete associé. A la fin de ton programme, il faut que tu effaces tous tes Objets:

      for(vector<Objet*>::iterator it = inventaire.begin() ; it != inventaire.end() ; it++)
          delete *it;
      • Partager sur Facebook
      • Partager sur Twitter
        8 juillet 2007 à 21:33:31

        Ho quel (tuuuuuuuuuuut, enfin vous l'aurez compris, longue séance de censure ) j'y avais pas pensé !
        Merci beaucoup cyprien_ de l'aide que tu m'as aujourd'hui apporté.
        Allez je vais m'y remettre, bye bye :D et merci encore.
        • Partager sur Facebook
        • Partager sur Twitter
          8 juillet 2007 à 21:47:38

          Pour éviter la boucle finale, tu peux regarder du côté de boost::shared_ptr qui gère ton pointeur tout seul, tu n'as alors plus à t'en occuper.
          Il y a aussi les Pointer Containers de boost pour cela :) M'enfin entraine toi déjà avec des simples vector de pointeurs.
          • Partager sur Facebook
          • Partager sur Twitter

          Problèmes avec les vecteurs

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown