Avatar ·

Pourquoi les templates C++ doivent être définis dans le fichier d'en-tête et non dans le .cpp ?

Bonjour à tous ! J'ai commencé à apprendre le C++ et j'ai rencontré un problème qui me déroute beaucoup. J'essaie de séparer le code en fichiers d'en-tête (.h) et fichiers d'implémentation (.cpp), comme on me l'a appris pour les classes et fonctions normales. Mais quand j'utilise des templates, cela ne fonctionne plus. Voici un exemple simple. J'ai un fichier d'en-tête `math_utils.h` : ```cpp #ifndef MATH_UTILS_H #define MATH_UTILS_H template T max(T a, T b); #endif ``` Et un fichier d'implémentation `math_utils.cpp` : ```cpp #include "math_utils.h" template T max(T a, T b) { return (a > b) ? a : b; } ``` Et `main.cpp` : ```cpp #include #include "math_utils.h" int main() { std::cout << max(3, 7) << std::endl; std::cout << max(3.5, 2.1) << std::endl; return 0; } ``` Lors de la compilation, j'obtiens une erreur de l'éditeur de liens (undefined reference). Pourquoi cela ? Pourtant, avec les fonctions normales, cette approche fonctionne parfaitement. J'ai lu que les templates doivent être définis directement dans le fichier d'en-tête.