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 :

class template avec paramètre template par défaut : erreur de link


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 36
    Par défaut class template avec paramètre template par défaut : erreur de link
    Bien le bonjour !

    Depuis que j'ai ajouté un paramètre template à l'une de mes classes - avec valeur par défaut - mon code ne link plus

    Le problème étant assez complexe et impliquant pas mal de classes dans différents fichiers, je préfère ne pas mettre ici le code exact mais plutôt une version représentative. Après plusieures heures à chercher l'origine du problème, je m'en remet à vous en espérant que quelqu'un arrive déjà à comprendre les explications qui suivent, je me lance ;

    Les différentes classes :

    - Ici, le parametre policy est le nouveau paramètre cité plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <template class T, class policy = DefaultPolicy<T> >
    class SharedPtr
    {<div style="margin-left:40px">// ...
    SharedPtr( const SharedPtr<T, policy>& other )
    {<div style="margin-left:40px">// ...</div>}
    // ...</div>}
    - Ici, la classe de base contenant les méthodes citées dans les erreurs de link
    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
     
    // fichier .h
    typedef SharedPtr<Node> NodePtr;
     
    class Node
    {
    <div style="margin-left:40px">
    // ...
    void AddNode( NodePtr& node );
    void RemoveNode( NodePtr& node );
    // ...</div>}
     
    // fichier .cpp
    void Node::AddNode( NodePtr& node )
    {<div style="margin-left:40px">// ...</div>}
    void Node::RemoveNode( NodePtr& node )
    {<div style="margin-left:40px">// ...</div>}
    - pour finir, j'ai 2 classes qui dérivent de ce node, et lors de l'édition de liens de celles-ci, j'ai droit à des error LNK2001 décrivant les méthodes de la class Node ci-dessus (addnode et removenode). Je précise qu'il s'agit d'un héritage simple et public et que les méthodes sus-citées n'y sont pas surchargées.

    Voilà, je crois que c'est à peu près tout, j'espère ne rien avoir oublié. Tiens, une chose ; j'ai essayé de compiler sans les 2 classes héritant de Node, et là bien sûr aucun problème, ca compile, link et run

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Vu le code que tu nous donnes, c'est normal, il n'y a pas de corps à ces 2 fonctions.

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 36
    Par défaut
    Oui, en fait dans mon code il y en a un de corps (dans le cpp), là c'est juste une version simplifiée de mon code, j'edit tout de même mon message au cas où

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    T'es bien sûr de compiler ce fichier cpp ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 36
    Par défaut
    Hum, c'est pas con ça

    Là je suis pas chez moi et n'ai donc pas accès au code, je vérifierai tout ça d'ici ce soir ou demain au pire, merci pour la piste en tout cas , je passerai dire si j'ai du neuf

  6. #6
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 36
    Par défaut
    Citation Envoyé par vinny_the_true
    Hum, c'est pas con ça

    Là je suis pas chez moi et n'ai donc pas accès au code, je vérifierai tout ça d'ici ce soir ou demain au pire, merci pour la piste en tout cas , je passerai dire si j'ai du neuf
    Heu, 2 secondes, il est un peu tôt et je crois bien avoir laissé mon double maléfique et ignare s'emparer de moi, il en a profité pour raconter n'importe quoi

    Je suis sous Visual 2005, existe-t-il une raison pour qu'un cpp faisant partie du projet ne soit pas compilé ? Et il faut quand même que j'eclaircisse un point : le code fonctionnait et linkait parfaitement avant que j'ajoute le paramètre template à valeur par défaut à mes SharedPtr, avec exactement le même code client qui utilise donc ces différentes -plus quelques autres- classes.
    En fait le but de la valeur par défaut du nouveau paramètre était également de ne pas modifier le code déjà existant usant des SharedPtr, ce que j'ai fais, les 3 classes Node et ses 2 descendants n'ont donc pas changé d'un poil...

    Maintenant, le problème vient peut-être d'ailleurs, si personne n'a de piste avec ce que je fourni ici je peux toujours essayer en donnant mon code à l'identique, mais ça fera rapidement un volume conséquant pour un post de forum

Discussions similaires

  1. Trier dans un template avec paramètres
    Par stujava dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/02/2010, 08h03
  2. Réponses: 19
    Dernier message: 23/12/2009, 19h22
  3. template, itérateurs et argument par défaut de fonction
    Par goran kajfes dans le forum Langage
    Réponses: 5
    Dernier message: 24/05/2009, 18h00
  4. Réponses: 2
    Dernier message: 27/03/2009, 22h01
  5. Problème de map avec paramètre template
    Par bouba dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2007, 13h19

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