Avatar ·

Pourquoi les templates C++ doivent-ils être implémentés dans les fichiers d'en-tête ? Erreur undefined reference

Bonjour ! Je suis débutant en C++ et j'essaie de comprendre les templates. J'ai un projet simple composé de trois fichiers : `main.cpp`, `math_utils.h` et `math_utils.cpp`. Dans le fichier d'en-tête, j'ai déclaré une fonction template : ```cpp // math_utils.h #ifndef MATH_UTILS_H #define MATH_UTILS_H template T max(T a, T b); #endif ``` Dans le fichier d'implémentation, j'ai écrit : ```cpp // math_utils.cpp #include "math_utils.h" template T max(T a, T b) { return (a > b) ? a : b; } ``` Et dans `main.cpp`, j'utilise : ```cpp // main.cpp #include #include "math_utils.h" int main() { std::cout << max(5, 10) << std::endl; return 0; } ``` Lors de la compilation, j'obtiens une erreur de linkage : `undefined reference to 'int max(int, int)'`. J'ai lu que les templates doivent être implémentés dans les fichiers d'en-tête, mais pourquoi ? Avec les fonctions normales, il n'y a pas ce problème — je peux déclarer dans `.h`, implémenter dans `.cpp`, et tout fonctionne. Pourquoi cela ne marche-t-il pas avec les templates ? Y a-t-il