Avatar ·

¿Por qué las plantillas de C++ deben implementarse en archivos de cabecera? Error undefined reference

¡Hola! Soy nuevo en C++ y estoy tratando de entender las plantillas. Tengo un proyecto simple de tres archivos: `main.cpp`, `math_utils.h` y `math_utils.cpp`. En el archivo de cabecera declaré una función template: ```cpp // math_utils.h #ifndef MATH_UTILS_H #define MATH_UTILS_H template T max(T a, T b); #endif ``` En el archivo de implementación escribí: ```cpp // math_utils.cpp #include "math_utils.h" template T max(T a, T b) { return (a > b) ? a : b; } ``` Y en `main.cpp` uso: ```cpp // main.cpp #include #include "math_utils.h" int main() { std::cout << max(5, 10) << std::endl; return 0; } ``` Al compilar, obtengo un error de enlace: `undefined reference to 'int max(int, int)'`. He leído que las plantillas deben implementarse en archivos de cabecera, pero ¿por qué? Con funciones normales no hay este problema — puedo declarar en `.h`, implementar en `.cpp`, y todo funciona. ¿Por qué con plantillas no es así? ¿Hay alguna