Partage
  • Partager sur Facebook
  • Partager sur Twitter

Template

Sujet résolu
    7 août 2007 à 20:08:13

    Bonjour.

    J'ai essayé d'ecrire un petit morceau de code pour manipuler un peu les template. J'ai ecrit toutes mes classes et mes méthodes, jusque la le programme compilait normalement, j'ai donc cré un objet de ma classe dans le 'main()', là non plus pas de prolème. Mais lorsque j'utilise ma méthode 'ajouter' le compilateur m'affiche des erreurs, j'ai aussi testé la méthode 'afficher' qui elle ne pose pas de probleme.

    Voici le code :

    #include <iostream>

    using namespace std;

    template <class Element>
    class Pile
    {
            typedef struct Liste
            {
                unsigned long int reference;
                Element objet;
                Liste* suivant;
            };

            Liste* m_tete;

            unsigned long int nouvelle_reference();


        public:
            Pile();
            ~Pile();
            void ajouter(Element);
            void supprimer(unsigned long int);
            void afficher();
    };

    template <class Element>
    Pile<Element>::Pile()
    {
        m_tete = NULL;
        return;
    }

    template <class Element>
    Pile<Element>::~Pile()
    {
        return;
    }

    template <class Element>
    void Pile<Element>::ajouter(Element objet)
    {
        Liste* nouveau = new Liste;
        nouveau->objet = objet;
        nouveau->reference = nouvelle_reference();
        nouveau->suivant = m_tete;
        m_tete = nouveau;
        return;
    }

    template <class Element>
    void Pile<Element>::supprimer(unsigned long int reference)
    {
        Liste *temporaire_1 = m_tete, *temporaire_2 = NULL;
        while(temporaire_1->reference != reference && temporaire_1 != NULL)
        {
            temporaire_2 = temporaire_1;
            temporaire_1 = temporaire_1->suivant;
        }
        if(temporaire_1 != NULL)
        {
            if(temporaire_2 == NULL)
                m_tete = temporaire_1->suivant;
            else
                temporaire_2->suivant = temporaire_1->suivant;
        }
        return;
    }

    template <class Element>
    void Pile<Element>::afficher()
    {
        Liste* temporaire = m_tete;
        while(temporaire != NULL)
        {
            cout << temporaire->objet << "\t" << temporaire->reference << endl;
            temporaire = temporaire->suivant;
        }
        return;
    }

    template <class Element>
    unsigned long int Pile<Element>::nouvelle_reference()
    {
        static unsigned long int reference = 0;
        return ++reference;
    }

    int main()
    {
        Pile<int> table;
        table.ajouter(2);
            return 0;
    }

     


    la ligne qui pose probleme est celle la :


    table.ajouter(2);
     


    et voici les erreurs affichées par le compilateurs :


    instantiated from here  ligne : table.ajouter(2);
    error: void value not ignored as it ought to be (ligne nouveau->reference = nouvelle_reference();)
    instantiated from 'void Pile<Element>::ajouter(Element) [with Element = int]' (ligne nouveau->reference = nouvelle_reference();)
    error: return-statement with a value, in function returning 'void' (lige return ++reference;)


    Ce code permet la manipulation d'une liste chainée.

    Merci d'avance a celui(ou ceux) qui pourra m'aider a comprendre ces erreurs et a les résoudre.
    • Partager sur Facebook
    • Partager sur Twitter
    FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
      7 août 2007 à 20:21:29

      void Pile<Element>::nouvelle_reference()
      {
          static unsigned long int reference = 0;
          return ++reference;
      }

      Un void qui retourne un int... :)
      De la l'erreur:
      nouveau->reference = nouvelle_reference();

      Tu ne peux convertir un void en int.
      • Partager sur Facebook
      • Partager sur Twitter
        7 août 2007 à 20:24:20

        Merci beaucoup, comment j'ai fait pour ne pas voir cette erreure *se met une baffe*. Encore merci [Kansuu].
        • Partager sur Facebook
        • Partager sur Twitter
        FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost

        Template

        × 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