Avatar ·

为什么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`中实现,一切正常。为什么模板就不行呢?有没有