Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de template

Sujet résolu
    17 juillet 2007 à 15:19:56

    Bonjour à tous.
    C'est la première fois que j'utilise les template et j'ai un problème à la compilation du code suivant :


    template <typename T>
    class CConteneur
    {
        private :
            T** Donnee;
            int Taille;

        public :
            CConteneur();
            ~CConteneur();
            void Allouer_Memoire(int taille);
            T* getValeur(int index);
            void setValeur(int index, T* valeur);
    };

    /*Méthodes de la classe Conteneur*/
    /*Constructeur : */
    template <typename T>
    CConteneur<T>::CConteneur()
    {
        this->Taille = 0;
    }

    template <typename T>
    CConteneur<T>::~CConteneur()
    {
        delete [] this->Donnee;
    }

    template <typename T>
    void CConteneur<T>::Allouer_Memoire(int taille)
    {
        this->Taille = taille;
        this->Donnee = new T*[this->Taille];
    }

    template <typename T>
    T* CConteneur<T>::getValeur(int index)
    {
        if ((index > -1) && (index < this->Taille))
            return this->Donnee[index];
        return NULL;
    }

    template <typename T>
    void CConteneur<T>::setValeur(int index, T* valeur)
    {
        if ((index > -1) && (index < this->Taille))
            this->Donnee[index] = valeur;
    }



    int main()
    {
        CConteneur<int> cont();
        cont.Allouer_Memoire(10);
        return EXIT_SUCCESS;
    }
     


    Lors de la compilation (j'utilise MinGW) le compilo me dit :

    error: request for member "Allouer_Memoire" in "cont", which is of non-class type "CConteneur<int> ()()"

    j'ai pourtant (je pense) pas fait d'erreur de syntaxe mais enfin...
    Donc si quelqu'un a une idée pour me débloquer merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      17 juillet 2007 à 15:33:35

      quand tu crée ton objet ne met pas les parenthèses :)
      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2007 à 15:40:00

        En réalité c'est celle ligne là qui plante:

            CConteneur<int> cont();


        Le compilateur croit que tu déclares une fonction appelée "cont" qui ne prend aucun argument et qui renvoie un CConteneur<int>, chose qui est tout à fait possible.
        Il t'engueules donc à la ligne suivante car il ne connaît pas l'objet "cont".

        L'erreur est la suivante: pour appeler un constructeur par défaut, il ne faut pas mettre les parenthèses.

            CConteneur<int> cont;


        Et ca fonctionnera.
        • Partager sur Facebook
        • Partager sur Twitter
        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
          17 juillet 2007 à 15:48:31

          ok merci tous le monde ca marche maintenant ! Ca le fait :)
          • Partager sur Facebook
          • Partager sur Twitter

          Problème de 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