operator overloading c++ / where to put my code? -


आज मैं & lt; & lt; मेरी कक्षाओं में से एक में ऑपरेटर:

  #ifndef TERMINALLOG_HH # परिभाषित नामस्थान std; TERMINALLOG_HH; क्लास टर्मिनलॉग {सार्वजनिक: टर्मिनलॉग (); Terminallog (int); वर्चुअल ~ टर्मिनलॉग (); टेम्पलेट & lt; कक्षा T & gt; टर्मिनलॉग एंड ऑपरेटर & lt; & lt; (कॉन्स्ट टी एंड वी); निजी:}; #endif   

जैसा कि आप देख सकते हैं मैं अपनी हेडर फाइल में अतिभारित ऑपरेटर को परिभाषित करता हूं और मैं इसे अपने .cc फ़ाइल में कार्यान्वित कर रहा हूं:

  // छीन लिया गया कोड टेम्पलेट & lt; class T & gt; टर्मिनलॉग एंड टर्मिनलॉग :: ऑपरेटर & lt; & lt; (कॉन्स्ट टी & amp; v) {cout & lt; & lt; endl; इस- & gt; मांगपत्र (); Cout & lt; & lt; v; वापसी * ​​यह; } // छांटे गए कोड   

इसके बाद मैंने अपने नए वर्ग का उपयोग कर एक main.cpp फ़ाइल बनाई:

  # शामिल "inc / terminallog.hh" int main () {टर्मिनलॉग रोकना (3); रोकना & lt; & lt; "Bla"; रोकना & lt; & lt; "Bla"; वापसी 0; }   

और मैं compilying पर चला गया:

  जी ++ src / terminallog.cc inc / terminallog.hh testmain.cpp -o test -Wall -Werror / Tmp / cckCmxai.o: फ़ंक्शन `मुख्य 'में: testmain.cpp :(। पाठ + 0x1ca):` टर्मिनलॉग एंड amp; के लिए अपरिभाषित संदर्भ; Terminallog :: ऑपरेटर के & lt; & lt; & Lt; char [4] & gt; (चार कॉन्स्ट (& amp;) [4]) 'testmain.cpp :(। पाठ + 0x1de): `टर्मिनलॉग एंड amp; Terminallog :: ऑपरेटर के & lt; & lt; & Lt; char [4] & gt; (चार कॉन्स्ट (& amp;) [4]) 'इकट्ठा 2: एलडी वापस 1 बाहर निकलें की स्थिति   

बाम! एक बेवकूफ लिंकर त्रुटि और मुझे अभी भी पता नहीं है कि यह कहां से आता है। मैंने थोड़ी देर के आसपास खेला और देखा कि मेरी हेडर फाइल में मेरे अतिभारित ऑपरेटर के क्रियान्वयन में सभी समस्याओं का समाधान हो रहा है अब मैं पहले की तुलना में और अधिक भ्रमित हूं।

मैं अपने .cc फ़ाइल में अतिभारित ऑपरेटर के कार्यान्वयन को क्यों नहीं रख सकता? जब यह मेरी हेडर फाइल में डालता है तो यह सुचारू रूप से क्यों चल रहा है?

ftiaronsem

यह सीपीपी फ़ाइल में कार्यान्वयन करना संभव है, लेकिन आपको इसे अपने द्वारा उपयोग किए जा रहे हर प्रकार के लिए अपने टेम्पलेट का उपयोग घोषित करना होगा। कृपया अधिक विस्तृत स्पष्टीकरण के लिए देखें।

आपके मामले में, आपको अपनी सीपीपी फ़ाइल में कहीं उस रेखा को लिखना है:

  टेम्पलेट टर्मिनलॉग एंड टर्मिनलॉग :: ऑपरेटर & lt; & lt ; (कॉन्स्ट चार् * एंड वी);    

Comments

Popular posts from this blog

qt - switch/case statement in C++ with a QString type -

python - sqlite3.OperationalError: near "REFERENCES": syntax error - foreign key creating -

Python's equivalent for Ruby's define_method? -