C++ Template, Linker undefined reference despite instantiation? -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 13 उत्तर
मैंने एक टेम्पलेट बनाने की कोशिश की एक 3D वेक्टर के कार्यान्वयन के लिए कक्षा 2 फाइलों के प्रासंगिक स्निपेट (vec3d.h और vec3d.cpp) हैं।
मुख्य सीपीपी निम्नानुसार है:
#include "vec3d.h" # शामिल करें & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; Int main () {Vec3D & lt; डबल & gt; ए (1,2,3), बी (2,4,5), सी; C = 2.3 * b; अदालत के & lt; & lt; c._x; वापसी 0; }
इसे
g ++ main.cpp vec3d.cpp vec3d.h के साथ संकलित करने पर निम्न त्रुटि आती है:
फ़ंक्शन में `मुख्य ': main.cpp :(। पाठ + 0x124):` विक् 3 डी & एलटी; डबल & gt;
मैंने परिभाषा और कार्यों की अलग-अलग घोषणाओं को अलग से रखा है, लेकिन मैंने
डबल के लिए टेम्पलेट को भी तत्काल रूप दिया है।
काफी हद तक,
c = b * 2.3 कोई त्रुटि नहीं डालता है कोई कारण?
मैं गलत क्या कर रहा हूं?
मजबूत> [[EDIT]]
मैंने कक्षा को तत्काल रूप से शुरू किया, जैसा होना चाहिए, लेकिन मैंने टेम्पलेट फ़ंक्शन को इन्स्तांत नहीं किया, जो कक्षा के बाहर मौजूद हैं। जाहिर है, मुझे भी इन्स्तांत करना होगा। यह नहीं पता था।
अधिक: का संदर्भ लें। टेम्प्लेट का इस्तेमाल करते हुए प्रत्येक सी ++ यूनिट को तत्काल मुहैया कराना होता है, अगर परिभाषाएँ फ़ाइल से एक अलग फ़ाइल में घोषणाओं के साथ होती हैं, न केवल कक्षाएं
आवश्यक ऑपरेटर की आवश्यकता नहीं है क्योंकि आपके पास यह है (क्लास के तत्काल होने के बावजूद), वे कक्षा के सदस्य नहीं हैं। इसलिए उन्हें घोषित किया जाता है लेकिन परिभाषा नहीं मिली है।
आपको पूरे टेम्प्लेट क्लास और संबद्ध ऑपरेटरों को हेडर में लागू करना चाहिए।
Comments
Post a Comment