为什么C++模板必须在头文件中定义,而不是在.cpp中?
大家好!我开始学习C++,遇到了一个让我很困惑的问题。我尝试像普通类和函数那样,将代码分成头文件(.h)和实现文件(.cpp),但当我使用模板(templates)时,这就不起作用了。
这是一个简单的例子。我有一个头文件 `math_utils.h`:
```cpp
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
template
T max(T a, T b);
#endif
```
以及实现文件 `math_utils.cpp`:
```cpp
#include "math_utils.h"
template
T max(T a, T b) {
return (a > b) ? a : b;
}
```
还有 `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;
}
```
编译时我得到了链接错误(undefined reference)。为什么会这样?对于普通函数,这种方法完全没问题。我读到过模板必须直接在头文件中定义。