Warum C++-Templates in der Header-Datei und nicht in .cpp definiert werden müssen
Hallo zusammen! Ich habe angefangen, C++ zu lernen, und bin auf ein Problem gestoßen, das mich sehr verwirrt. Ich versuche, den Code in Header-Dateien (.h) und Implementierungsdateien (.cpp) aufzuteilen, wie ich es für normale Klassen und Funktionen gelernt habe. Aber wenn ich Templates verwende, funktioniert das nicht mehr.
Hier ist ein einfaches Beispiel. Ich habe eine Header-Datei `math_utils.h`:
```cpp
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
template
T max(T a, T b);
#endif
```
Und eine Implementierungsdatei `math_utils.cpp`:
```cpp
#include "math_utils.h"
template
T max(T a, T b) {
return (a > b) ? a : b;
}
```
Und `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;
}
```
Beim Kompilieren erhalte ich einen Linker-Fehler (undefined reference). Warum ist das so? Bei normalen Funktionen funktioniert dieser Ansatz einwandfrei. Ich habe gelesen, dass Templates direkt in der Header-Datei definiert werden müssen.