Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau d'une classe

Est ce possible ?

Sujet résolu
    26 mai 2007 à 19:39:54

    Voilà bonjour à tous !
    Je n'ai plus le problème du tableau de ma class mais j'ai un autre soucis un peu dérangeant mon compilateur me sort des lignes incompréhensibles pour ma part l'erreur se situe dans mon main.cpp ligne 10 je vais vous l'indiquez.
    #ifndef DEF_NOTES
    #define DEF_NOTES
    #include <iostream>
    #include <string>
     
     enum Langue
    {
            FR,ANG
    };
     
     class Note
    {
            public:
                    /*Constructeur*/
                    Note();
                    /*Constructeur note la valeur par Défaut et ANG donc une note anglaise sera la note par défaut*/
                    Note(std::string note,Langue Langue = ANG);
                    /*Affectation d'une note, par défaut une note anglaise.*/
                    void Set_Note(std::string note,Langue Langue = ANG);
                    /*Affectation de deux notes*/
                    void Set_Notes(std::string note_ang,std::string note_fr);
                    /*Récupérer la valeur de m_note_ang*/
                    std::string Get_Note_Ang() const;
                    /*Récupérer la valeur de m_note_fr*/
                    std::string Get_Note_Fr() const;
                   
                   
                   
            private:
                    /*Note anglaise*/
                    std::string m_note_ang;
                    /*Note française*/
                    std::string m_note_fr;
                   
                   
    };
     
    #endif

     

    Voilà ensuite Notes.cpp:
    #include "Notes.h"
    using namespace std;
    Note::Note():m_note_ang(""),m_note_fr("")
    {
    }
    Note::Note(string note,Langue Langue)
    {
            switch(Langue)
            {
                    case FR:
                            m_note_fr = note;
                            break;
                    case ANG:
                            m_note_ang = note;
                            break;
            }
    }
    void Note::Set_Note(string note,Langue Langue)
    {
            switch(Langue)
            {
                    case ANG:
                            m_note_ang = note;
                            break;
                    case FR:
                            m_note_fr = note;
                            break;
            }
    }
    void Note::Set_Notes(string note_ang,string note_fr)
    {
            m_note_ang = note_ang;
            m_note_fr = note_fr;
    }
    string Note::Get_Note_Ang() const
    {
            return m_note_ang;
    }
    string Note::Get_Note_Fr() const
    {
            return m_note_fr;
    }

    Voilà ensuite Fichiers.h:
    #ifndef DEF_FICHIERS
    #define DEF_FICHIERS

    #include <fstream>
    #include <iostream>
    #include "Notes.h"

    void Create_File();
    void Create_Scale(std::fstream Scales);

    #endif

    Puis Fichiers.cpp:
    #include "Fichiers.h"
    using namespace std;

    void Create_File()
    {
            ofstream File;
            File.open("Scales.scl");
            File.close();
    }

    void Create_Scale(fstream Scales)
    {
            Note *Scale;
            Scale = new Note[12];
            Scale[0].Set_Notes("C","Do");
            Scale[1].Set_Notes("C#","Do#");
            Scale[2].Set_Notes("D","Re");
            Scale[3].Set_Notes("D#","Mib");
            Scale[4].Set_Notes("E","Mi");
            Scale[5].Set_Notes("F","Fa");
            Scale[6].Set_Notes("F#","Fa#");
            Scale[7].Set_Notes("G","Sol");
            Scale[8].Set_Notes("G#","Sol#");
            Scale[9].Set_Notes("A","La");
            Scale[10].Set_Notes("A#","Sib");
            Scale[11].Set_Notes("B","Si");
           
           
            for(int i=0;i<12;i++)
            {
                    Scales<<Scale[i].Get_Note_Ang()<<" "<<Scale[i].Get_Note_Fr()<<endl;
            }
            delete[] Scale;
    }


    Et mon main.cpp:
    #include "Fichiers.h"
     
     using namespace std;
     
     int main()
    {
            Create_File();
            fstream Scales;
            Scales.open("Scales.scl",fstream::in|fstream::out|fstream::trunc);
            Create_Scale(Scales);/* Ici le compilateur me dit qu'il y a une erreur d'initialisation si j'ai bien compris*/
            return 0;
    }

    Voilà ce que le compilateur me dit:
    matarc@Matarc:~/Programmation/Convertisseur Notes$ g++ -o Scale Notes.cpp Fichiers.cpp main.cpp
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&amp;)’:
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ios_base.h:779: erreur: ‘std::ios_base::ios_base(const std::ios_base&amp;)’ is private
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd:55: erreur: à l'intérieur du contexte
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd: In copy constructor ‘std::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic_fstream<char, std::char_traits<char> >&amp;)’:
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd:95: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&amp;)’ first required here
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/streambuf: In copy constructor ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&amp;)’:
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/streambuf:781: erreur: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&amp;) [with _CharT = char, _Traits = std::char_traits<char>]’ is private
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd:86: erreur: à l'intérieur du contexte
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd: In copy constructor ‘std::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic_fstream<char, std::char_traits<char> >&amp;)’:
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/iosfwd:95: note: synthesized method ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&amp;)’ first required here
    main.cpp: In function ‘int main()’:
    main.cpp:10: note: synthesized method ‘std::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic_fstream<char, std::char_traits<char> >&amp;)’ first required here
    main.cpp:10: erreur:   initializing argument 1 of ‘void Create_Scale(std::fstream)’

    Que faire ?
    Merci d'avance :) .
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      26 mai 2007 à 19:52:49

      salut,
      tu pourrai nous donner le code de la classe note car on ne peut pas tester les solution sans :(
      je croit qu'en faisant
      Scale[0]->Set_Notes("C","Do");

      ca peut marcher ;)
      • Partager sur Facebook
      • Partager sur Twitter
        26 mai 2007 à 20:00:10

        youyou a raison, ça marchera mieux comme ça. Garde le . et met pas -> ;) ! Et aussi enlève ça:
        Scale = new Note[7];

        Tu créerais deux tableaux et ne pourrais en gérer qu'un(= fuite de mémoire :-° ).
        • Partager sur Facebook
        • Partager sur Twitter
          26 mai 2007 à 20:52:34

          Citation : altic

          youyou a raison, ça marchera mieux comme ça ;) ! Et aussi enlève ça:

          Scale = new Note[7];


          Tu créerais deux tableaux et ne pourrais en gérer qu'un(= fuite de mémoire :-° ).


          Comment ca je créerais deux tableaux et je ne pourrais en gérer qu'un ?
          Ah oui je sais pas pourquoi j'ai écris ça alors que je n'ai mis que la deuxieme ligne dans mon code xD .
          Le coup de la flèche ne fonctionne pas :( je vais éditer mon premier post et mettre le code de ma class.
          • Partager sur Facebook
          • Partager sur Twitter
            26 mai 2007 à 21:08:33

            Et l'implémentation stp ^^ ?
            • Partager sur Facebook
            • Partager sur Twitter
              27 mai 2007 à 1:42:27

              C'est moi ou tu ne nous as pas donné le bon code? Je ne vois pas de fstream.

              De plus, indiques-nous où est la ligne de l'erreur. C'est pas que je ne veuille pas compter ... mais cmment dire ... je ne vais pas le faire.
              • 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.
                27 mai 2007 à 10:52:26

                ce n'est pas scales mais scale, remplace par:
                  for(int i=0;i<12;i++)
                        {
                                cout<<Scale[i].Get_Note_Ang()<<" "<<Scale[i].Get_Note_Fr()<<endl;
                        }

                Je pense que ça ira mieux :) .
                • Partager sur Facebook
                • Partager sur Twitter
                  27 mai 2007 à 12:09:10

                  Oui altic je m'en suis rendu compte ce matin en retrifouillant mon code :p . Mais j'ai un autre petit problème voir mon premier post je l'ai édité ;) .
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 mai 2007 à 12:34:49

                    Est-ce que tu pourrais me dire ce qu'est censé faire ton programme parce que je crois que tu t'es embrouillé là... :lol:
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 mai 2007 à 12:42:55

                      Ben pour le moment il doit juste écrire dans un fichier les notes de la gamme do ré mi fa sol la si et la même chose en anglais de la facon suivante :
                      Note_anglaise Note_Francaise
                      Note_Anglaise Note_Francaise
                      ...

                      Donc je ne pense pas m'être embrouillé :p .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 mai 2007 à 14:23:40

                        Bon j'ai réussi à faire fonctionner ton programme, j'ai supprimé Fichiers.cpp et Notes.cpp. C'est du bourin mais ça marche :p . Ta seule vrai erreur était qu'il fallait donner en paramètre à Create_Scale() une référence àun objet scale et des petits problèmes d'inclusion.
                        Les fichiers:
                        main.cpp
                        using namespace std;

                        #include <iostream>
                        #include <string>
                        #include <fstream>
                        #include "Notes.h"
                        #include "Fichiers.h"


                         int main()
                        {
                                Create_File();
                                fstream Scales;
                                Scales.open("Scales.scl",fstream::in|fstream::out|fstream::trunc);
                                Create_Scale(Scales);/* Ici le compilateur me dit qu'il y a une erreur d'initialisation si j'ai bien compris*/
                                return 0;
                        }


                        Fichiers.h

                        void Create_File()
                        {
                                ofstream File;
                                File.open("Scales.scl");
                                File.close();
                        }

                        void Create_Scale(fstream& Scales)
                        {
                                Note *Scale;
                                Scale = new Note[12];
                                Scale[0].Set_Notes("C","Do");
                                Scale[1].Set_Notes("C#","Do#");
                                Scale[2].Set_Notes("D","Re");
                                Scale[3].Set_Notes("D#","Mib");
                                Scale[4].Set_Notes("E","Mi");
                                Scale[5].Set_Notes("F","Fa");
                                Scale[6].Set_Notes("F#","Fa#");
                                Scale[7].Set_Notes("G","Sol");
                                Scale[8].Set_Notes("G#","Sol#");
                                Scale[9].Set_Notes("A","La");
                                Scale[10].Set_Notes("A#","Sib");
                                Scale[11].Set_Notes("B","Si");


                                for(int i=0;i<12;i++)
                                {
                                        Scales<<Scale[i].Get_Note_Ang()<<" "<<Scale[i].Get_Note_Fr()<<endl;
                                }
                                delete[] Scale;
                        }

                        Notes.h
                        #ifndef DEF_NOTES
                        #define DEF_NOTES
                         enum Langue{FR,ANG};

                         class Note
                        {
                                public:
                                        /*Constructeur*/
                                        Note();
                                        /*Constructeur note la valeur par Défaut et ANG donc une note anglaise sera la note par défaut*/
                                        Note(std::string note,Langue Langue = ANG);
                                        /*Affectation d'une note, par défaut une note anglaise.*/
                                        void Set_Note(std::string note,Langue Langue = ANG);
                                        /*Affectation de deux notes*/
                                        void Set_Notes(std::string note_ang,std::string note_fr);
                                        /*Récupérer la valeur de m_note_ang*/
                                        std::string Get_Note_Ang() const;
                                        /*Récupérer la valeur de m_note_fr*/
                                        std::string Get_Note_Fr() const;



                                private:
                                        /*Note anglaise*/
                                        std::string m_note_ang;
                                        /*Note française*/
                                        std::string m_note_fr;


                        };

                        Note::Note():m_note_ang(""),m_note_fr("")
                        {
                        }

                        Note::Note(string note,Langue Langue)
                        {
                                switch(Langue)
                                {
                                        case FR:
                                                m_note_fr = note;
                                                break;
                                        case ANG:
                                                m_note_ang = note;
                                                break;
                                }
                        }

                        void Note::Set_Note(string note,Langue Langue)
                        {
                                switch(Langue)
                                {
                                        case ANG:
                                                m_note_ang = note;
                                                break;
                                        case FR:
                                                m_note_fr = note;
                                                break;
                                }
                        }
                        void Note::Set_Notes(string note_ang,string note_fr)
                        {
                                m_note_ang = note_ang;
                                m_note_fr = note_fr;
                        }

                        string Note::Get_Note_Ang() const
                        {
                                return m_note_ang;
                        }

                        string Note::Get_Note_Fr() const
                        {
                                return m_note_fr;
                        }
                        #endif

                        Voila :)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Tableau 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