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
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen