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:
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:
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 :?