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
No answers yet.
Connectez-vous pour laisser une réponse