IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

template -> petit problème !


Sujet :

Langage C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut template -> petit problème !
    Bonjour,
    j'ai un soucis avec une méthode dans mon petit projet, lequel consiste à concevoir un arbre générique. J'ai fouillé sur le forum ainsi que dans la FAQ, mais je n'ai malheureusement pas trouvé de réponse à mon problème qui est, j'en suis certain, vraiment anodin...alors voici le bout de code qui me cause ennui:

    j'ai un fichier .h dans lequel se situe la classe Arbre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    /**
     * \file BST.h
     * \brief Classe définissant un arbre 
     * \author Bert
     * \version 0.1
     * \date juillet 2010
     *
     * Definition de la classe Arbre et de ses méthodes de parcours 
     *
     */
     
    #ifndef _BST
    #define _BST
     
    #pragma warning( disable : 4290 )
    #include <stdexcept>
     
    #include <iostream>
    #include <vector>
    #include <queue>
     
    namespace Arbre_Lab8
    {
     
        /** 
        * \class Arbre
        *
        * \brief classe générique représentant un arbre
        *
        *  La classe gère un arbre générique. L'implémentation
        *  se fait par chaînage.
        */ 
        template <typename E>
        class Arbre
        {
        public:
     
       ... (je ne mets pas toutes les méthodes, elles ne sont pas problématiques)
     
            private:
            /** 
            * \class Noeud
            *
            * \brief classe interne représentant un noeud typique de l'arbre
            *
            *  La classe représente un noeud typique
            *  pour implémenter un arbre par chaînage.
            */
            class Noeud
            {
              public:
                E data;            /*!< La donnée dans l'arbre*/
                Noeud *gauche;    /*!< Pointeur vers le fils gauche*/
                Noeud *droite;    /*!< Pointeur vers le fils droit*/
                /**                       
                 * \brief Constructeur de la classe Noeud
                 *
                 * \post un noeud typique est intialisé
                 * 
                 */
                Noeud( const E&d ): gauche( 0 ), data( d ), droite( 0 ) { }
            };
     
            // Les membres données
            Noeud * racine;    /*!< La racine de l'arbre*/
     
            ... (même chose ici, il y a d'autre méthodes privées non-problématiques)
     
            /**                       
             *  \brief Construction d'un arbre à partir des tableaux de 2 visites (père et symétrique)
             *
             * Fonction récursive auxiliaire pour le constructeur #2
             * 
             *  \pre Il faut qu'il y ait suffisamment de mémoire
             *
             *  \post Le sous-arbre construit est retourné
             *
             *  \exception bad_alloc s'il n'y a pas assez de mémoire
             */
            Noeud * _auxPereSym(E *tabS, int debut, int fin, E **ptr, int &card) throw(std::bad_alloc);
     
        };
    }//Fin du namespace
     
    #include "BST.inl"
     
    #endif
    Et j'ai un fichier .inl qui contient les définitions des méthodes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    /**
     * \file BST.inl
     * \brief Le code des opérateurs
     * \author Bert
     * \version 0.1
     * \date juillet 2010
     *
     * Implémentation des méthodes de parcours d'un arbre générique  
     *
     */
     
    namespace Arbre_Lab8
    {
         ... (autres méthodes non-problématiques)
     
    	/**
             * \fn Arbre<E>::Noeud * Arbre<E>::_auxPereSym(E * tab, int debut,  int fin, E ** ptr, int &card) throw (std::bad_alloc)
             *
             * \param[in] tabS Le tableau contenant le fruit de la visite symétrique
             * \param[in] debut L'indice de début de tabS
             * \param[in] fin L'indice de fin de tabS
             * \param[in] ptr Le tableau contenant le fruit de la visite au père
             * \param[in] card La cardinalité de tabP
             * 
             */
    	template <typename E>
    	Arbre<E>::Noeud * Arbre<E>::_auxPereSym(E * tab, int debut, int fin, E ** ptr, int &card) throw (std::bad_alloc) //<<<<<l'erreur est à cette ligne
    	{
    		Noeud * unNoeud; // ceci est uniquement pour que ça compile...
     
    		return unNoeud;
    	}
     
     
    }//Fin du namespace
    Alors, à la compilation (avec Visual studio 8) j'ai le message d'erreur suivant:

    error C2143: erreur de syntaxe*: absence de ';' avant '*'

    ???
    Je n'y comprends rien, quelqu'un a une idée svp?

    merci d'avance !

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Ok, désolé pour le dérangement, j'ai trouver la coquille...

    je devais ajouter "typename" ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template <typename E>
    typename Arbre<E>::Noeud * Arbre<E>::_auxPereSym(E * tab, int debut, int fin, E ** ptr, int &card) throw (std::bad_alloc)

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour et bienvenu,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Noeud
    {
    public:
    E data; /*!< La donnée dans l'arbre*/
    Noeud *gauche; /*!< Pointeur vers le fils gauche*/
    Noeud *droite; /*!< Pointeur vers le fils droit*/
    Noeud( const E&d ): gauche( 0 ), data( d ), droite( 0 ) { }
    };
    F.A.Q. : Dans quel ordre sont construits les différents composants d'une classe ?

    Gestion des pointeurs nus : Présentation des pointeurs intelligents en C++

    Je me pose des questions quand je vois un double pointeur (**) comme paramètre d'une de tes fonctions. Es-tu sur de fournir la bonne interface ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour, et merci pour le bienvenue !!!

    Pour répondre à ta question, oui je suis certain de fournir la bonne interface... en fait tout fonctionne parfaitement , regarde, voici ma méthode une fois codée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    template <typename E>
    typename Arbre<E>::Noeud * Arbre<E>::_auxPereSym(E * tab, int debut, int fin, E ** ptr, int &card) throw (std::bad_alloc)
    {
    	Noeud * unNoeud = 0;
    	int pos;
     
    	if (fin < debut) return NULL;
     
    	//allocation du noeud et mise de la valeur dedans
    	unNoeud = new Noeud(**ptr);
     
    	//on cherche la position (pos) du **ptr dans le tab de la visite symétrique
    	for (pos = debut; (pos < fin) && (tab[pos] != **ptr); pos++);
     
            //incrémentation du pointeur du tableau de la priorité aux père	
    	(*ptr)++;
     
    	unNoeud->gauche = _auxPereSym(tab, debut, pos-1, ptr, card);
    	unNoeud->droite = _auxPereSym(tab, pos+1, fin, ptr, card);
     
    	return unNoeud;
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème de structure et de variadic template
    Par Awakening dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2012, 01h30
  2. Petit problème de classe foncteur template
    Par ailonn dans le forum C++
    Réponses: 6
    Dernier message: 18/06/2011, 23h25
  3. Petit problème de template
    Par alen dans le forum MFC
    Réponses: 12
    Dernier message: 29/05/2008, 11h10
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo