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 :

Classes template


Sujet :

Langage C++

  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut Classes template
    Bonjour

    J'ai une classe template permettant de gérer des piles, mais elle ne fonctionne pas comme il faut, j'ai toujours la même erreur à la compilation

    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
    #ifndef _STACK_H_
    #define _STACK_H_
     
    template<class T>
    struct StackItem {
        StackItem<T> *prev;
        T val;
    };
     
    template<class T>
    class Stack {
        StackItem<T> *first;
        unsigned int len;
    public:
        Stack();
        Stack(T first);
        void Append(T item);
        void Del();
        T* Get();
        unsigned int Length();
        T* Pop();
    };
     
    #include "stack.cpp"
    #endif
    Stack.cpp 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
    #ifdef _STACK_H_
     
    template<class T>
    Stack<T>::Stack() {
        this->len = 0;
        this->first = NULL;
    }
     
    template<class T>
    Stack<T>::Stack(T first) {
        StackItem<T> *f;
        f->val = first;
        f->prev = NULL;
        this->len = 1;
        this->first = f;
    }//[...]
    Je crée mon instance comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stack<unsigned int> while_pos();
    main.cpp:108: error: request for member `Append' in `while_pos', which is of non-class type `Stack<unsigned int> ()()'

    main.cpp:111: error: request for member `Get' in `while_pos', which is of non-class type `Stack<unsigned int> ()()'
    main.cpp:117: error: request for member `Del' in `while_pos', which is of non-class type `Stack<unsigned int> ()()'

    main.cpp:138: error: request for member `Length' in `while_pos', which is of non-class type `Stack<unsigned int> ()()'

    main.cpp:141: error: request for member `Length' in `while_pos', which is of non-class type `Stack<unsigned int> ()()'

    main.cpp:142: error: request for member `Length' in `while_pos', which is of non-class type `Stack<unsigned int> ()()'
    Les utilisations se font à l'intérieur d'un switch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while_pos.Append((unsigned int)f.tellg()); //ligne 108
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *wpos = while_pos.Get(); //ligne 111
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while_pos.Del(); //ligne 117
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(while_pos.Length() > 0) { //ligne 138
    Les lignes 141 et 142 sont des appels à Stack<unsigned int>::Length de la forme:
    [EDIT]J'utilise Dev-C++

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stack<unsigned int> while_pos();
    Ceci est une déclaration de fonction. Oublie les parenthèses si tu veux déclarer une instance.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Erreur idiote, oublié de supprimer les parenthèses après avoir enlevé l'argument
    Merci

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

Discussions similaires

  1. Problèmes de fonctions membres de classe templates, gcc3.3.6
    Par yves.dessertine dans le forum Autres éditeurs
    Réponses: 12
    Dernier message: 17/10/2005, 21h36
  2. Trouver le Type d'une classe template dynamiquement ?
    Par Serge Iovleff dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2005, 16h48
  3. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 18h56
  4. Class template hérité
    Par Azharis dans le forum Langage
    Réponses: 4
    Dernier message: 24/06/2005, 22h03
  5. Réponses: 6
    Dernier message: 06/10/2004, 12h59

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