2011-09-16 3 views
1

J'ai un test de classe modèle, et je suis en train de définir la fonction suivante dans un fichier d'en-tête séparé:y compris un modèle de classe dans une carte

template<typename T> 
T dtest(const int, std::map<int, Test<T> >& y); 

mais je reçois l'erreur suivante:

‘Test’ was not declared in this scope

template argument 2 is invalid

template argument 4 is invalid

+0

L'en-tête est-il inclus si la définition de 'Test' est incluse? Est-ce dans le même espace de noms? –

+0

oui en effet, il est inclus ... – itcplpl

+0

Pouvez-vous poster la déclaration de Test? – Kashyap

Répondre

1

Étant donné que vous affirmez que l'en-tête qui définit Test<T> est inclus par l'en-tête qui déclare dtest, je vais vous deviner avez une circulaire comprend: L'en-tête Test<T> comprend également l'en-tête dtest.

+0

oui, je crois que tu as raison ... comment puis-je m'en sortir? – itcplpl

+0

déclarations sans définitions, et assurez-vous de ne transmettre que l'un ou l'autre type par pointeur/référence, mais pas par valeur. –

+0

Très bien, laissez-moi essayer cela – itcplpl

0
#include <map> 
template<class T> 
class Test{}; 

template<typename T> 
T dtest(const int, std::map<int, Test<T> >& y); 

Ceci compile bien tant que vous incluez la définition de Test et carte; le code est bien.

Questions connexes