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 :

Problème de classe "template"


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 17
    Points
    17
    Par défaut Problème de classe "template"
    Bonjour,

    Je viens vers vous aujourd'hui car j'ai un soucis dans un code source que je viens de récupérer. Celui-ci utilise des classes "template" dont les fonctions membres sont prototypées dans les classes mais définies dans des .cpp et non dans les .h eux-même.

    Du coup, j'ai des erreurs de compilation me disant que mes fonctions membres ne sont pas définies, ce qui me parait plutot normal.

    J'ai donc voulu déplacer les fonctions des .cpp dans les .h, directement à la suite de la classe. Pour la plupart de mes fonctions, ça marche très bien. Les erreurs relatives à ces fonctions sont d'ailleurs bien supprimées.

    Mon problème vient d'une dernière fonction membre, un peu spéciale.
    Dans mon exemple, je la nommerais fonctiontoto(). Elle fait parti de la classe TOTO (actuellement située dans TOTO.H) et est définie dans TOTO.cpp.
    J'introduis aussi la classe TITI, située dans TITI.h et dont les fonctions membres sont définies dans TITI.cpp

    //TOTO.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    template<class T>
    class TOTO {
    ...
    //fonction membre
    fonctiontoto(); 
    }
    TITI.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <TOTO.h>  //nécessaire car besoin de la classe TOTO
     
    template<class T>
    class TITI {
    //plein de choses fonction de la classe TOTO
    //exemple:
    private:
        TOTO<T>* _pvariable
    ...
    //fonction membre
    fonctiontiti();
    }
    TOTO.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <TOTO.h>
    #include <TITI.h> //necessaire car utilisation de la classe TITI
                               //dans la def de la fonction fonctiontoto()
                               //membre de la classe TOTO
     
    template <class T> TOTO<T>& 
    TOTO<T>::fonctiontoto()
    { 
    ... 
    TITI<T> next((TOTO<T>&)s);  
    ... 
    }
    TITI.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <TITI.h>  
     
    template <class T> ...
    TITI<T>::fonctiontiti()
    {
    ...
    }
    Comme je le disais, j'essaye de déplacer la définition de la fonction fonctiontoto() directement après la classe dans TOTO.h
    Cependant, lorsque je fais ceci, il me signale que, dans TOTO.h, TITI est inconnue. (Ce qui me parait normal...) J'ai donc insérer un #include TITI.h juste entre la classe et la fonction pour qu'il reconnaisse l'utilisation de la classe TITI dans la fonction membre fonctiontoto(). (J'ai aussi essayer de placer le include en début du fichier.h). Mais rien y fait, TITI est toujours inconnu.

    J'ai un peu peur que le problème vienne du fait que TOTO doit connaitre TITI, MAIS que TITI dois aussi connaitre TOTO (puisqu'il y a du "TOTO" dans la definition de la classe TITI). Je ne vois pas trop ce que ca pourrait etre d'autre...
    D'ailleurs, si je commente la ligne où apparait TITI dans la fonction fonctiontoto(), tout roule. C'est donc là le problème...

    Quelqu'un aurait il une solution?

    Merci d'avance

  2. #2
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Quelqu'un aurait il une solution?
    La FAQ l'a peut-être ! Déclaration anticipée ?

  3. #3
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 042
    Points : 2 232
    Points
    2 232
    Par défaut
    Bonjour,
    Ton problème est simple et la solution se trouve dans la FAQ du site:

    http://cpp.developpez.com/faq/cpp/?p...erence_croisee

    Cordialement,
    Homer J. Simpson


  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Autant pour moi. Je me suis focalisé sur un problème de template dans la FAQ mais c'était bien un problème plus général aux classes.

    J'aurais eu le terme "déclaration anticipée", j'aurais été plus efficace

    Merci à vous pour le coup de main et bonne soirée.

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

Discussions similaires

  1. Petit problème de classe foncteur template
    Par ailonn dans le forum C++
    Réponses: 6
    Dernier message: 19/06/2011, 00h25
  2. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 12h47

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