C++ टेम्पलेट्स को हेडर फ़ाइलों में क्यों लागू किया जाना चाहिए? undefined reference त्रुटि
नमस्ते! मैं 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` में लागू कर सकता हूँ, और सब काम करता है। टेम्पलेट्स के साथ ऐसा क्यों नहीं है? क्या कोई...