Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau à l'aide des attributs d'une classe

Anonyme
    10 mai 2008 à 20:19:41

    Salut,

    j'ai un petit problème avec une de mes classes : (j'ai coupé une partie)
    private:
        int m_largeur, m_hauteur, m_nbLayers;
        int m_map[m_largeur][m_hauteur][m_nbLayers];
    


    J'ai plein d'erreurs de compilation :
    Image utilisateur

    Et si je fais
    int m_map[m_largeur][m_hauteur][m_nbLayers];
    
    dans une des méthodes de la classe il n'y a pas d'erreur de compilation mais un bug de l'application à ce moment là.
    Comment contourner le problème ?
    • Partager sur Facebook
    • Partager sur Twitter
      10 mai 2008 à 20:33:00

      Pour créer un tableau de ce type, il faut que les grandeurs soient des constantes connues à la compilation. Donc pas possible dans une classe sous cette forme.

      Pour une bonne solution, suis le tuto proposé dans ma signature.
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
      Anonyme
        12 mai 2008 à 17:21:52

        J'ai suivi ton tuto, j'ai donc :
        vector<vector<vector<int> > > map;
        

        Pour ma map. Comment resize un tableau tridimensionnel? J'ai essayé ça :
        map.resize(10, vector(10,vector<int>(10, 0)));
        

        Mais ça ne marche pas :/ (missing template arguments)

        Comment puis-je faire ?
        • Partager sur Facebook
        • Partager sur Twitter
          12 mai 2008 à 17:43:55

          Personellement, je construirais directement le tavbleau avec la bonne taille plutôt.
          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            12 mai 2008 à 22:13:02

            tu peux garder ton système de tableau, mais tu devras l'allouer dynamiquement dans le constructeur de ta classe.
            Dans la déclaration de la classe :
            private:
                int m_largeur, m_hauteur, m_nbLayers;
                int *m_map;
            

            Puis le constructeur :
            m_map = new int[m_largeur * m_hauteur * m_nbLayers];
            

            Le problème c'est qu'il te faudra un petit calcul supplémentaire pour accéder aux bonnes adresses du tableau, parce que tu ne peux pas créer de tableaux à trois entrées il me semble :-°
            Après je ne sais pas, c'est peut-être plus simple avec des vecteurs... A toi de voir
            Bonne chance ;)

            • Partager sur Facebook
            • Partager sur Twitter
              13 mai 2008 à 15:40:49

              je vx avoire des leçon ce ki concerne les fichiers et l'accées ver eu et mm les tableau. Merci d'avance les amis
              • Partager sur Facebook
              • Partager sur Twitter
                13 mai 2008 à 15:54:17

                Citation : bilaliste

                je vx avoire des leçon ce ki concerne les fichiers et l'accées ver eu et mm les tableau. Merci d'avance les amis



                m'euh...

                J'ai pas vraiment compris ton langage, je crois que c'est un de ces dialecte texto. Bon enfin, si tu comprends le français : Démarre un nouveau fil de discussion et pose ta question dans un français convenable.

                * MatteX se tape sur les doigts : «Fatiguant va !».


                [EDIT]

                Bon avec tout ça j'ai oublié que je voulais répondre au sujet en cours. :p


                @master dwarf : L'utilisation des std::vector == tableau dynamiques sécuritaires.

                @SkyJedi : Regarde des références sur la STL. Tu remarqueras qu'il y a un constructeur paramétrique qui ressemble à un resize.

                Tout ce que tu as à faire c'est de l'utiliser dans la liste d'initialisation (Voir le cours sur les classes).

                [/EDIT]
                • Partager sur Facebook
                • Partager sur Twitter

                Tableau à l'aide des attributs d'une classe

                × 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