Avatar ·

Warum müssen C++-Templates in Header-Dateien implementiert werden? Fehler undefined reference

Hallo! Ich bin neu in C++ und versuche, mich mit Templates vertraut zu machen. Ich habe ein einfaches Projekt mit drei Dateien: `main.cpp`, `math_utils.h` und `math_utils.cpp`. In der Header-Datei habe ich eine Template-Funktion deklariert: ```cpp // math_utils.h #ifndef MATH_UTILS_H #define MATH_UTILS_H template T max(T a, T b); #endif ``` In der Implementierungsdatei habe ich geschrieben: ```cpp // math_utils.cpp #include "math_utils.h" template T max(T a, T b) { return (a > b) ? a : b; } ``` Und in `main.cpp` verwende ich: ```cpp // main.cpp #include #include "math_utils.h" int main() { std::cout << max(5, 10) << std::endl; return 0; } ``` Beim Kompilieren erhalte ich einen Linker-Fehler: `undefined reference to 'int max(int, int)'`. Ich habe gelesen, dass Templates in Header-Dateien implementiert werden müssen, aber warum? Bei normalen Funktionen gibt es dieses Problem nicht – ich kann in `.h` deklarieren, in `.cpp` implementieren, und alles funktioniert. Warum ist das bei Templates nicht so? Gibt es