为什么C++模板必须在头文件中实现?未定义引用错误
你好!我是C++新手,正在尝试理解模板。我有一个简单的项目,包含三个文件:`main.cpp`、`math_utils.h`和`math_utils.cpp`。
在头文件中,我声明了一个模板函数:
```cpp
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
template
T max(T a, T b);
#endif
```
在实现文件中,我写了:
```cpp
// math_utils.cpp
#include "math_utils.h"
template
T max(T a, T b) {
return (a > b) ? a : b;
}
```
然后在`main.cpp`中我使用了:
```cpp
// main.cpp
#include
#include "math_utils.h"
int main() {
std::cout << max(5, 10) << std::endl;
return 0;
}
```
编译时我遇到了链接错误:`undefined reference to 'int max(int, int)'`。我读到过模板必须在头文件中实现,但为什么呢?对于普通函数,就没有这个问题——我可以在`.h`中声明,在`.cpp`中实现,一切正常。为什么模板就不行呢?有没有