सी ++, सभी मैं करना चाहता हूँ एक .h
फ़ाइल में एक DisplayInfo
वर्ग का ऐलान करते हैं और उसके बाद .cpp
फ़ाइल में, पहले DisplayInfo::DisplayInfo()
और हर समारोह परिभाषा लिखने की आवश्यकता नहीं है।यदि मैं हेडर में नेमस्पेस घोषित करता हूं तो क्या मैं .cpp फ़ाइल में क्लास नाम का उपयोग करने से बच सकता हूं?
अफसोस की बात है, मैंने अब 20 से अधिक विषयों और मेरी सी ++ पुस्तक को दो घंटे से अधिक समय तक देखा है और इसे हल करने में सक्षम नहीं हैं। मुझे लगता है कि ऐसा इसलिए है क्योंकि मैं सी ++ में अपने 10 साल के जावा प्रशिक्षण का उपयोग करने की कोशिश कर रहा हूं।
1 परीक्षण:
//DisplayInfo.h
namespace DisplayInfoNamespace
{
Class DisplayInfo
{
public:
DisplayInfo(); //default constructor
float getWidth();
float getHeight();
...
};
}
//DisplayInfo.cpp
using namespace DisplayInfoNamespace; //doesn't work
using namespace DisplayInfoNamespace::DisplayInfo //doesn't work either
using DisplayInfoNamespace::DisplayInfo //doesn't work
{
DisplayInfo::DisplayInfo() {}; //works when I remove the namespace, but the first DisplayInfo:: is what I don't want to type
DisplayInfo::getWidth() {return DisplayInfo::width;} //more DisplayInfo:: that I don't want to type
...
}
दूसरे परीक्षण के लिए, मैं आदेश स्विचन की कोशिश की, तो यह
class DisplayInfo
{
namespace DisplayInfoNamespace
{
...
}
}
था और .cpp
फ़ाइल में, प्लस
using namespace DisplayInfo::DisplayInfoNamespace;
तीसरे परीक्षण के लिए मैंने इसे इस शीर्षलेख के साथ घोषित करने की कोशिश की:
namespace DisplayInfoNamespace
{
class DisplayInfo;
}
class DisplayInfo
{
public:
...all my methods and constructors...
};
मैं व्यक्त VisualStudio2010 और ध्यान से पढ़ने त्रुटि संदेश शीर्ष लेख और .cpp फ़ाइल में वर्गों और नामस्थान की सही व्यवस्था इस काम को बनाने के लिए ढूँढने में सक्षम नहीं किया गया है के बावजूद उपयोग कर रहा हूँ
।
और अब जब मैंने इसे टाइप करने में 30 मिनट बिताए, तो C++: "Class namespaces"? उत्तर है? (उर्फ नहीं, आपको टाइपपीफ का उपयोग करना होगा?)
धन्यवाद, लेकिन ऐसा लगता है कि इसे बाईपास करने का कोई तरीका नहीं है। क्या मैं कक्षा को .cpp फ़ाइल या कुछ में परिभाषित करना चाहता हूं? – user2247872
नहीं, लेकिन यदि आप नहीं करते हैं, तो आपको यह निर्दिष्ट करना होगा कि foo() कहां से आता है (उदाहरण में)। मैं इसे साफ़ करने के लिए संपादित कर दूंगा। – scones
यदि आप स्रोत फ़ाइल को डंप करने और हेडर पर चिपकने के इच्छुक हैं (जो टेम्पलेट क्लास/फ़ंक्शन को परिभाषित करते समय मामला है) तो आप अपना कार्यान्वयन शीर्षलेख में डाल सकते हैं और इस प्रकार कक्षा के दायरे को इसके सामने नहीं जोड़ना होगा कार्यों की घोषणा क्योंकि ये भी परिभाषाएं हैं। – rbaleksandar