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

 C++ Discussion :

Probleme heritage (debutant)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Par défaut Probleme heritage (debutant)
    Salut a tous , pourriez vous m'aider a debugger mon code svp :
    voila mes 4 fichiers source: (pfifo etant la classe fille de fifo)

    fifo.h:
    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
     
    #ifndef _FIFO_H
    #define _FIFO_H
     
    template <typename ELEM, int CAPACITY>
    class Fifo{
     
    public :
     
    Fifo() { head = 0 ; size=0 ;}
    void add(ELEM);
    ELEM remove();
    bool is_full() const ;
    bool is_empty() const ;
    void print() const ;
     
    class Full {} ;
    class Empty {} ;
     
    protected :
    ELEM Tab[CAPACITY] ;
    int head ;
    int size ;
     
    };
     
    #include "fifo.cc"
     
    #endif
    fifo.cc
    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
     
    #include <iostream>
    using namespace std ;
    #include "fifo.h" 
     
    template <typename ELEM, int CAPACITY>
    void Fifo<ELEM,CAPACITY>::add(ELEM elem) {
    //cout << "add : size="<<size<<" Head="<<head<<endl;
    if ( size >= CAPACITY ) throw Full() ;
    Tab[(head+size)%CAPACITY]=elem;
    size++;
    }
     
    template <typename ELEM, int CAPACITY>
    ELEM Fifo<ELEM,CAPACITY>::remove(){
    //cout << "remove : size="<<size<<" Head="<<head<<endl;
    ELEM element ;
    if ( size <= 0 ) throw Empty() ;
    element = Tab[head] ;
    size--;
    head=(head+1)%CAPACITY;
    return element;
    }
     
    template <typename ELEM, int CAPACITY>
    bool Fifo<ELEM,CAPACITY>::is_full() const {
    return size>=CAPACITY ;
    }
     
    template <typename ELEM, int CAPACITY>
    bool Fifo<ELEM,CAPACITY>::is_empty() const {
    return size<=0;
    }
     
    template <typename ELEM, int CAPACITY>
    void Fifo<ELEM,CAPACITY>::print() const {
    //cout << "head " << head << '\n';
    for(int i=0;i<size;i++){
    cout << Tab[(head+i)%CAPACITY] << " ";
    }
    }
    pfifo.h:
    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
     
    #ifndef _PFIFO_H
    #define _PFIFO_H
     
    #include "fifo.h"
     
    template <typename ELEM, int CAPACITY>
    class PriorityFifo : public Fifo<ELEM,CAPACITY>{
     
    public :
    void add(ELEM);
    };
     
    #include "pfifo.cc"
     
    #endif
    et pfifo.cc :
    #include "pfifo.h"

    template <typename ELEM, int CAPACITY>
    void PriorityFifo<ELEM,CAPACITY>::add(ELEM elem) {
    int i = size ;
    if ( size >= CAPACITY ) throw Full() ;
    while ( ( elem > Tab[((head+i-1)+CAPACITY)%CAPACITY] ) && i>0 ){
    //on decale
    Tab[(head+i)%CAPACITY]=Tab[((head+i-1)+CAPACITY)%CAPACITY];
    i--;
    }
    //on insere
    Tab[(i+head)%CAPACITY]=elem;
    size++;
    }
    Enfin l'erreur de compilation
    g++ -g testpfifo.cc -c
    pfifo.cc: In member function ‘void PriorityFifo<ELEM, CAPACITY>::add(ELEM)’:
    pfifo.cc:6: error: ‘size’ was not declared in this scope
    pfifo.cc:7: error: there are no arguments to ‘Full’ that depend on a template parameter, so a declaration of ‘Full’ must be available
    pfifo.cc:7: error: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
    pfifo.cc:8: error: ‘Tab’ was not declared in this scope
    pfifo.cc:8: error: ‘head’ was not declared in this scope
    pfifo.cc:14: error: ‘Tab’ was not declared in this scope
    pfifo.cc:14: error: ‘head’ was not declared in this scope
    pfifo.cc: In member function ‘void PriorityFifo<ELEM, CAPACITY>::add(ELEM) [with ELEM = double, int CAPACITY = 3]’:
    testpfifo.cc:24: instantiated from here
    pfifo.cc:7: error: expected primary-expression
    pfifo.cc: In member function ‘void PriorityFifo<ELEM, CAPACITY>::add(ELEM) [with ELEM = char, int CAPACITY = 10]’:
    testpfifo.cc:70: instantiated from here
    pfifo.cc:7: error: expected primary-expression
    pfifo.cc: In member function ‘void PriorityFifo<ELEM, CAPACITY>::add(ELEM) [with ELEM = Rationnel, int CAPACITY = 5]’:
    testpfifo.cc:85: instantiated from here
    pfifo.cc:7: error: expected primary-expression
    make: *** [testpfifo.o] Erreur 1

  2. #2
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Salut,
    Sans doute rien à voir avec ton problème, mais pourquoi tu mets dans tes fichiers .h ?

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Parce que c'est la définition d'un template, et que celle-ci doit se trouver dans le même fichier que sa déclaration, ou alors il faut utiliser le mot-clé export, malheureusement tous les compilateurs ne le supportent pas.

    Par contre du coup il ne faut pas inclure le .h dans le .cc.

  4. #4
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Ok, j'en apprends tous les jours

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Pourquoi ne pas implémenter, carrément un véritable systeme FIFO (une véritable file), voire, utiliser les queue et autres dequeue disponible dans l'espace de nommage std

    Cela pourrait te faciliter la tache, non (entre autres, en t'évitant d'avoir recours à un tableau statique pour les éléments)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Par défaut
    Lol , c'est parce que c'est un tp ( suis en master d'info ) , et donc je dois suivre les consignes du sujet .
    Help

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par pouic06
    Lol , c'est parce que c'est un tp ( suis en master d'info ) , et donc je dois suivre les consignes du sujet .
    Help
    Oui... Evidemment... Mettons donc que je n'ai rien dit

    Mais qu'ont donc tous ces profs qui donnent des TP de nature à fournir de mauvaises habitudes
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Dans ton fichier pfifo.cc, vire le #include pfifo.h et dans le fifo.cc vire le #include fifo.h

Discussions similaires

  1. quelques problemes de debutant avec count
    Par shirya dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/09/2005, 22h14
  2. probleme de debutant sous access
    Par guili dans le forum Access
    Réponses: 8
    Dernier message: 23/06/2005, 16h39
  3. Probleme heritage : References sur la table parente
    Par Belgar dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h11
  4. probleme heritage en C#
    Par roninou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/04/2005, 19h12
  5. Problème pour debuter avec glut
    Par ismael14 dans le forum GLUT
    Réponses: 2
    Dernier message: 26/07/2004, 10h37

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