Avatar ·

Por qué las plantillas de C++ deben definirse en el archivo de encabezado y no en .cpp

¡Hola a todos! Empecé a estudiar C++ y me encontré con un problema que me confunde mucho. Intento dividir el código en archivos de encabezado (.h) y archivos de implementación (.cpp), como me enseñaron para clases y funciones normales. Pero cuando uso templates, esto deja de funcionar. Aquí hay un ejemplo simple. Tengo un archivo de encabezado `math_utils.h`: ```cpp #ifndef MATH_UTILS_H #define MATH_UTILS_H template T max(T a, T b); #endif ``` Y un archivo de implementación `math_utils.cpp`: ```cpp #include "math_utils.h" template T max(T a, T b) { return (a > b) ? a : b; } ``` Y `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; } ``` Al compilar, obtengo un error del linker (undefined reference). ¿Por qué sucede esto? Con funciones normales este enfoque funciona perfectamente. He leído que las plantillas deben definirse directamente en el