Partage
  • Partager sur Facebook
  • Partager sur Twitter

allocation dynamqiue de tableau d'objet

Sujet résolu
    9 août 2007 à 15:55:53

    salut alors j'ai un problème dans mon code, que voici :

    1. Allies *PnjAllies = NULL;
    2.     positiondepart = chargerniveau(plateau, plateau_collision, niveauchoisis, positionallies);//on charge le niveau la
    3.     // fonction retourne les coordonées de départ du hero et 3 tableau
    4.     taille = positionallies[0].nbr;
    5.     for(int i = 0; i < positionallies[0].nbr; i++)
    6.     {
    7.             departallies.x =positionallies[i].coord.x;
    8.             departallies.y =positionallies[i].coord.y;
    9.             PnjAllies[i](departallies, 2) = new Allies;
    10.     }


    erreur: 89 no match for call to `(Allies) (SDL_Rect&, int)'
    no matching function for call to `Allies::Allies()'

    cette erreur me spécifie qu'il ne trouve pas la méthode associé alors que celle spécifié dans la note de mon compilateur

    note Allies::Allies(SDL_Rect, int)

    est exactement celle que j'ai créé alors je pense que j'ai un petit problème la si quelqu'un pouvait m'éclairer merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      9 août 2007 à 16:07:51

      pour faire un tableau d'objet c'est :
      MyObj* obj = new MyObj[X];
      delete [] obj;
      • Partager sur Facebook
      • Partager sur Twitter
        9 août 2007 à 16:57:03

        Il est a noter que :

        MyObj* obj = new MyObj[X];
        appelle le constructeur par défaut de l'objet MyObj.
        Pour appeler un autre constructuer :

        MyObj* obj = new MyObj[X](parametres);

        Personnellement, j'aime pas, car ça instancie tous les objets avec les memes parametres de base : autant faire un tableau de pointeurs, et faire un for derriere...

        Lorie !!!! Lorie !!!! Lorie !!! :p:p:p
        • Partager sur Facebook
        • Partager sur Twitter

        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

          9 août 2007 à 17:16:28

          j'ai essayé comme tu m'a dis fvirtman mais mon débogueur me dis : ISO C++ forbids initialization in array new

          je fais quoi moi ?

          EDIT : fvirtman si tu reviens tu pourrais mêxpliquer ta technique avec les tableaux de pointeur ? STP

          EDIT 2:
          voilà j'ai fais plein de tests mon résultats le meilleurs

          1. position *positionallies = NULL;
          2.     positionallies = new position[taille];
          3.     positiondepart = chargerniveau(plateau, plateau_collision, niveauchoisis, positionallies);//on charge le niveau la
          4.     // fonction retourne les coordonées de départ du hero et 3 tableau
          5.     Allies *allies[10];
          6.     for(int i = 0; i < positionallies[0].nbr; i++)
          7.     {
          8.              Allies z(positionallies[i].coord, 2);
          9.              allies[i] = &z;
          10.     }


          si un cerveau attentionné pouvait me dire si c'est juste ou plutot irrationnelle comme technique (entendé par irrationnelle le fait qu'on ne fasse pas ça pour des problème de mémoire ou autre chose)

          merci d'avance

          EDIT 3: j'ai rajoutéà un petit bout de cod epour gérer le déplacement cependant une erreur de segmentation

          c'est faux ça ?

          1. for(int i = 0; i < nbrallies; i++)
          2.     {
          3.             allies[i]->deplacer(ecran,BAS,plateau_collision);
          4.     }
          • Partager sur Facebook
          • Partager sur Twitter
            9 août 2007 à 17:17:13

            Il faut aussi remarqué qu'en C++ il est préférable d'utiliser le type vector plutôt que les tableaux... C'est plus facile à gérer.
            • Partager sur Facebook
            • Partager sur Twitter
              9 août 2007 à 17:49:14

              Oui à mon avis tu ferais mieux d'utiliser un vector pour ranger tes objet plutôt que de les alloués avec new[], menfin après on fait comme on veut :p

              Si tu veut les associé à des clés pour les ranger tu peut utiliser std::map ;)
              • Partager sur Facebook
              • Partager sur Twitter
                9 août 2007 à 18:09:23

                un petit exemple peut ? :D parce que je comprends pas trop comment marche un vecteur ?

                du genre je fait

                :
                1. vector<Allies> allies(2);//initialisation d'un vecteur contentant 2 objet Allies
                2. for(int i = 0; i < allies.size(); i++)
                3. {
                4. allies(0).deplacer(x,y);
                5. }


                ça marche ce code ?
                • Partager sur Facebook
                • Partager sur Twitter
                  9 août 2007 à 18:18:03

                  çà marchera mieux si tu remplaces :
                  allies(0).deplacer(x,y);
                  par
                  allies(i).deplacer(x,y);
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 août 2007 à 18:29:06

                    oui c'est vrai ^^
                    l'include pour les vecteur c'est std::vector ou std::map ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 août 2007 à 18:33:46

                      C'est vector :

                      1. #include <vector>


                      et map pour std::map, sa parait logique :p
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 août 2007 à 18:36:19

                        c'est quoi la différence entre une map et un vecteur ?

                        EDIT: je peux définir un vecteur avec une variable ?
                        du genre vector<int> tableau(taille) ?

                        et comment je fais pour utiliser les constructeur ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 août 2007 à 18:49:14

                          Citation : icare14

                          c'est quoi la différence entre une map et un vecteur ?


                          un vecteur c'est un tableau dynamyque. map c'est un tableau dont la clé n'est pas forcément un nombre (tu pourras faire map["zero"] au lieu de map[3])

                          Citation : icare14

                          EDIT: je peuyx définir un vecteur avec une variable ?
                          du genre vector<int> tableau(taille) ?


                          oui
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 août 2007 à 18:57:43

                            ça marche pas car j'ai mon tableau mais après je sais pas comment l'utiliser avec les méthode et les constructeur
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 août 2007 à 21:01:36

                              J'ai quelques exemples sur les STL (vector, map...)
                              Regarde ma signature, mon tuto §D.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                9 août 2007 à 21:18:50

                                y a pas quelqu'un qui aurait un exemple de code parce que j'ai beau essayé ça veut toujours pas
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 août 2007 à 21:30:25

                                  Citation : icare14

                                  y a pas quelqu'un qui aurait un exemple de code parce que j'ai beau essayé ça veut toujours pas


                                  Que cherches-tu à faire exactement?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 août 2007 à 21:36:45

                                    en gros je code un mini rpg. Là j'ai codé la classe alliées qui va regrouper les paysans et soldats qui vont m'aider maintenant j'aimerais trouve un moyen de telle manière à gérer tout ce petit monde et à créer tout ce petit monde

                                    je pensais à un tableau d'objet : comme ça y a qu'à regarder ce que fait chacun et éxectué ce qu'il fait au moyen d'un for et d'un switch

                                    cependant j'arrive pas à créer ce tableau ou lorsque j'y arrive j'arrive pas à utiliser les méthode comme la méthode déplacer

                                    merci pour votre aide si vous avez besoin de plus de précision dites le moi
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      9 août 2007 à 21:44:30

                                      Citation : icare14

                                      en gros je code un mini rpg. Là j'ai codé la classe alliées qui va regrouper les paysans et soldats qui vont m'aider maintenant j'aimerais trouve un moyen de telle manière à gérer tout ce petit monde et à créer tout ce petit monde

                                      je pensais à un tableau d'objet : comme ça y a qu'à regarder ce que fait chacun et éxectué ce qu'il fait au moyen d'un for et d'un switch

                                      cependant j'arrive pas à créer ce tableau ou lorsque j'y arrive j'arrive pas à utiliser les méthode comme la méthode déplacer

                                      merci pour votre aide si vous avez besoin de plus de précision dites le moi



                                      1. vector<Allies> allies(2);//initialisation d'un vecteur contentant 2 objet Allies
                                      2. for(int i = 0; i < allies.size(); i++)
                                      3. {
                                      4. allies[i].deplacer(x,y);
                                      5. }

                                      devrait normalement marcher.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        9 août 2007 à 21:48:28

                                        Bonjour à tous.

                                        Puis-je savoir ce qu'est un vector ? Parce que moi aussi j'ai fai tun tableau d'objet, et vous dites que un vector c'est plus simple. Mais c'est quoi ? Et ça marche comment ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          9 août 2007 à 21:51:10

                                          Citation : PC17pouces

                                          Bonjour à tous.

                                          Puis-je savoir ce qu'est un vector ? Parce que moi aussi j'ai fai tun tableau d'objet, et vous dites que un vector c'est plus simple. Mais c'est quoi ? Et ça marche comment ?


                                          Je pense que tu trouvera ce que tu cherche, ici et .
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            9 août 2007 à 22:01:19

                                            Yes of course... Mais, n'il y a t'il pas une doc In French pease ? :D:D
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              9 août 2007 à 22:06:37

                                              Citation : PC17pouces

                                              Yes of course... Mais, n'il y a t'il pas une doc In French pease ? :D:D


                                              Je sais pas ce que ça vaut mais j'ai trouvé ça.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                9 août 2007 à 22:56:48

                                                une dernière question et je crois que ça va marcher je n'ai pas de constructeur par défaut comment je fais pour utiliser un autre constructeur lorsd de l'initialisation ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  9 août 2007 à 23:37:14

                                                  Remplis avec des push_back ; optimise avec un reserve.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                                    9 août 2007 à 23:55:18

                                                    Citation : icare14

                                                    une dernière question et je crois que ça va marcher je n'ai pas de constructeur par défaut comment je fais pour utiliser un autre constructeur lorsd de l'initialisation ?


                                                    Bah tu peux toujours faire sa:
                                                    1. vecteur.push_back(new classe(constructeur));
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      10 août 2007 à 0:04:15

                                                      Dans ce cas il faut pas déclarer le vector comme cela ?

                                                      1. std::vector<Allies*> allies(2);


                                                      Pour allouer des pointeurs vers les objets.
                                                      Sans oublier la désallocation, automatique si tu la place dans le destructeur ;)

                                                      Enfin pour moi new ne fonctionnait qu'avec les pointeurs, c'est le cas ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        10 août 2007 à 0:09:10

                                                        Citation : atoboldom

                                                        Dans ce cas il faut pas déclarer le vector comme cela ?

                                                        1. std::vector<Allies*> allies(2);



                                                        Pour allouer des pointeurs vers les objets.
                                                        Sans oublier la désallocation, automatique si tu la place dans le destructeur ;)

                                                        Enfin pour moi new ne fonctionnait qu'avec les pointeurs, c'est le cas ?


                                                        Non, c'est juste une façon plus cours de faire ça:
                                                        1. taclasse var(constructeur);
                                                        2. vecteur.push_back(var);
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          10 août 2007 à 1:10:49

                                                          edit ta citation c'est pas moi qui ai dis sa :p
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          allocation dynamqiue de tableau d'objet

                                                          × 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