¿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
No answers yet.
Inicia sesión para dejar una respuesta