संभव डुप्लिकेट:
Why can templates only be implemented in the header file?.cpp फ़ाइल शामिल करें?
मैं चारों ओर की कोशिश कर रहा है के साथ हाल ही में सी ++। फिलहाल मैं कुछ प्रोग्राम करने की कोशिश कर रहा हूं, मुझे यकीन है कि कभी भी कम से कम एक बार किया गया है: एक साधारण लिंक्डलिस्ट क्लास। कोड किया गया है, लेकिन मैं इसे संकलित करने में असफल रहा हूं। मैं googling गया है और ऐसा लगता है जैसे मैं ऑब्जेक्ट फ़ाइलों को गलत जोड़ रहा हूँ। यही कारण है कि मेरी कोड मूल रूप से दिखाई देता है जैसे:
test.cpp
#include "linkedlist.h"
int main()
{
LinkedList<int> list;
// do something
}
linkedlist.h
template <typename T>
class LinkedList
{
// a lot of function and variable definitions
}
तो फिर वहाँ जो सभी के वास्तविक कोड में शामिल है एक .cpp फ़ाइल linkedlist.cpp कहा जाता है लिंकरलिस्ट वर्ग। जब निम्न आदेश का उपयोग कर test.cpp संकलित करने के लिए कोशिश कर रहा है:
g++ ..\src\test.cpp
मुझे बताया गया हो रही वहाँ 'LinkedList :: LinkedList()' के लिए एक अपरिभाषित संदर्भ है कि। तो मैं सोच किया गया है कि यह गलत जोड़ा जा रहा है के रूप में वहाँ एक से अधिक .cpp फ़ाइल है, तो मैं इसे इस तरह की कोशिश की:
g++ -c -Wall -O2 ..\src\test.cpp
g++ -c -Wall -O2 ..\src\linkedlist.cpp
g++ -s test.o linkedlist.o
बहरहाल, यह कुछ भी नहीं बदलता है। त्रुटि संदेश वही रहते हैं। मैं इंटरनेट पर कुछ जानकारी खोजने की कोशिश कर रहा हूं, हालांकि, यह वास्तव में काम नहीं करता था।
यह पूरी तरह से और सुसंगत रूप से तैयार करने के लिए किया गया है। :) एक नवागंतुक के लिए दुर्लभ, आजकल :( –
चूंकि 'लिंक्डलिस्ट' एक टेम्पलेट वर्ग है, इसलिए उस वर्ग के उपयोगकर्ताओं को सभी विधियों की पूर्ण परिभाषा की आवश्यकता होती है। ऐसा करने का एक तरीका कक्षा में सभी विधियों को इनलाइन करना है, जबकि दूसरा विधियों को एक अलग फ़ाइल में रखने के लिए और उन्हें हेडर फ़ाइल में शामिल करें। –
@ माइक: इसे "डुप्लिकेट" प्रति से कॉल करना मुश्किल है। यह वह जगह है जहां चीजें अस्पष्ट होती हैं - सवाल पूरी तरह से अलग है, भले ही हम डॉन न करें एक ही जमीन को फिर से कवर करने की आवश्यकता नहीं है। :) –