Avatar ·

لماذا يجب تنفيذ القوالب (templates) في C++ في ملفات الرأس (header files)؟ خطأ undefined reference

مرحبًا! أنا مبتدئ في C++ وأحاول فهم القوالب (templates). لدي مشروع بسيط من ثلاثة ملفات: `main.cpp` و `math_utils.h` و `math_utils.cpp`. في ملف الرأس (header file)، أعلنت عن دالة قالبية (template function): ```cpp // math_utils.h #ifndef MATH_UTILS_H #define MATH_UTILS_H template T max(T a, T b); #endif ``` في ملف التنفيذ (implementation file)، كتبت: ```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; } ``` عند التجميع، أحصل على خطأ ربط (linking error): `undefined reference to 'int max(int, int)'`. قرأت أن القوالب (templates) يجب تنفيذها في ملفات الرأس (header files)، لكن لماذا؟ فالدوال العادية لا تواجه هذه المشكلة — يمكنني الإعلان في `.h` والتنفيذ في `.cpp`، وكل شيء يعمل. لماذا الأمر ليس كذلك مع القوالب (templates)؟ هل هناك