“Utilisé sans parameters de modèle”

Je sais que des questions similaires ont déjà été posées, mais j’en lis quelques-unes et je ne vois toujours pas où je me trompe. Lorsque j’écris simplement ma classe sans séparer le prototype de la définition, tout se passe bien. Le problème se produit lorsque je sépare le prototype et la définition, comme indiqué ci-dessous:

template class VisitedSet { public: VisitedSet(); int getSize(); void addSolution(const T& soln); void evaluate(); private: vector vec; int iteration; }; 

Et à titre d’exemple d’une définition qui me donne cette erreur:

 int VisitedSet::getSize() { return vec.size(); 

Je n’ai jamais fait de cours basé sur un modèle auparavant, alors veuillez me pardonner si le problème ici est sortingvial.

VisitedSet est un modèle et non une classe. Vous ne pouvez donc pas utiliser VisitedSet dans un spécificateur de nom nested tel que VisitedSet::getSize() . Tout comme vous avez spécifié la déclaration de la class VisitedSet pour toutes les class T , vous devez spécifier la définition de VisitedSet::getSize() pour toutes les class T :

 template int VisitedSet::getSize() { // ^^^ return vec.size(); } 

Le nom d’un modèle peut cependant être utilisé comme s’il s’agissait d’une classe dans une définition de modèle:

 template struct Example { Example* parent; T x, y; }; 

Dans ce cas, Example est l’abréviation de Example .

Tu veux ça:

 template  int VisitedSet::getSize() { return vec.size(); } 

Vous devez également indiquer le paramètre template dans la définition.

 template int VisitedSet::getSize() { return vec.size(); } 

sinon, le compilateur ne peut pas le faire correspondre à la déclaration. Par exemple, il peut exister des spécialisations pour certains types de parameters.

Vous devez informer votre compilateur que vous implémentez une méthode dans la fonction template:

  template int VisitedSet::getSize() { return vec.size(); } 

Essayez de mettre

 template  

au-dessus de l’implémentation de VisitedSet :: getSize () – mais sachez qu’en général, les classes et les fonctions basées sur des modèles devraient toutes être en ligne. Voir la FAQ c ++ ici pour plus d’informations.