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