Avatar ·

Por que os templates C++ precisam ser implementados em arquivos de cabeçalho? Erro undefined reference

Olá! Sou novo em C++ e estou tentando entender os templates. Tenho um projeto simples com três arquivos: `main.cpp`, `math_utils.h` e `math_utils.cpp`. No arquivo de cabeçalho, declarei uma função template: ```cpp // math_utils.h #ifndef MATH_UTILS_H #define MATH_UTILS_H template T max(T a, T b); #endif ``` No arquivo de implementação, escrevi: ```cpp // math_utils.cpp #include "math_utils.h" template T max(T a, T b) { return (a > b) ? a : b; } ``` E no `main.cpp` eu uso: ```cpp // main.cpp #include #include "math_utils.h" int main() { std::cout << max(5, 10) << std::endl; return 0; } ``` Ao compilar, recebo um erro de linker: `undefined reference to 'int max(int, int)'`. Li que os templates precisam ser implementados em arquivos de cabeçalho, mas por quê? Já que com funções normais não há esse problema — posso declarar no `.h`, implementar no `.cpp`, e tudo funciona. Por que com templates não é assim? Existe alguma