Bonjour,
 
Je rencontre un problème à la compilation d'un projet en C++ écrit sous Microsoft visual Studio que je ne comprends pas.
De manière simplifiée, j'ai rédigé trois fichiers :
 
Article.h
 
Code :
 - #ifndef _NR_H_
 - #define _NR_H_
 - namespace Article
 - 	{
 -   template<typename T>
 -   T cube(T);
 - 	}
 - #endif _NR_H_
 
  | 
 
Article.cpp
 
Code :
 - #include "Article.h"
 - template<typename T>
 - T Article::cube(T a)
 - {
 - 	return (a*a*a);
 - };
 
  | 
 
et main.cpp
 
 
Code :
 - #include <iostream>
 - using namespace std;
 - #include "Article.h"
 - int main()
 - {
 - 	int tata = 5;
 - 	cout << Article::cube(tata) << endl;
 - 	system("pause" );
 - }
 
  | 
 
 
La compilation se passe bien jusquà l'édition de lien qui renvoie le message :
 
Code :
 - 1>main.obj : error LNK2019: symbole externe non résolu "int __cdecl Article::cube<int>(int)" (??$cube@H@Article@@YAHH@Z) référencé dans la fonction _main
 - 1>C:\Users\NathanGe\Documents\Visual Studio 2005\Projects\Template\Test\Debug\Test.exe : fatal error LNK1120: 1 externes non résolus
 - 1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\NathanGe\Documents\Visual Studio 2005\Projects\Template\Test\Test\Debug\BuildLog.htm"
 - 1>Test - 2 erreur(s), 0 avertissement(s)
 - ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
 
  | 
 
Sauriez-vous d'ou provient cette erreur ?
 
L'utilisation des templates me parait pourtant correcte, d'autant plus que le programme :
 
Code :
 - #include <iostream>
 - using namespace std;
 - namespace Article
 - 	{
 -   template<typename T>
 -   T cube(T);
 - 	}
 - template<typename T>
 - T Article::cube(T a)
 - {
 - 	return (a*a*a);
 - };
 - int main()
 - {
 - 	int tata = 5;
 - 	cout << Article::cube(tata) << endl;
 - 	system("pause" );
 - }
 
  | 
 
se compile et s'éxécute sans erreur !
 
Pourriez-vous me fournir une aide pour comprendre mon problème ?
 
Merci d'avance