2010-12-22 9 views
31

स्थानीय कॉलेज में रात के पाठ्यक्रम से सी # पृष्ठभूमि से आ रहा है, मैंने सी ++ में अपना रास्ता शुरू कर दिया है। वाक्यविन्यास में बहुत दर्द हो रहा है। कोडिंग तकनीकों की बात आती है जब भी मैं अभी भी बहुत हरा हूं।मैं कोड के किसी अन्य भाग में कक्षा से एनम मान का उपयोग कैसे करूं?

मेरे WinMain फ़ंक्शन से, मैं एक वेरिएबल तक पहुंचने में सक्षम होना चाहता हूं जो कि किसी अन्य वर्ग में घोषित एनम का उपयोग कर रहा है।

(inside core.h) 
class Core 
{ 
    public: 
    enum GAME_MODE 
    { 
     INIT, 
     MENUS, 
     GAMEPLAY 
    }; 
    GAME_MODE gameMode; 

    Core(); 
    ~Core(); 
    ...OtherFunctions(); 
}; 

(inside main.cpp) 
Core core; 
int WINAPI WinMain(...) 
{ 
    ... startup code here... 

    core.gameMode = Core.GAME_MODE.INIT; 

    ...etc... 
} 

मूल रूप से मैं अपने WinMain समारोह से enum या ऐसा Init का मूल्य कुछ करने के लिए है कि gamemode सेट करना चाहते हैं। मैं इसे अन्य क्षेत्रों से भी पढ़ने में सक्षम होना चाहता हूं।

मैं त्रुटि मिलती है ...

expected primary-expression before '.' token 

मैं तो मैं एक ही त्रुटि मिलती है core.gameMode = Core::GAME_MODE.INIT; इस्तेमाल करने की कोशिश, तो।

मैं सर्वोत्तम प्रथाओं के बारे में चिंतित नहीं हूं, क्योंकि मैं फ़ाइलों के बीच सी ++ में चर के चारों ओर घूमने की बुनियादी समझ प्राप्त करने की कोशिश कर रहा हूं। मैं यह सुनिश्चित कर दूंगा कि वेरिएबल की लचीलापन के लिए उपयोग किए जाने के बाद चर को संरक्षित किया जाता है और बाद में अच्छी तरह से टकरा जाता है।

अगर मैं सही ढंग से याद, सी # मुझे अन्य वर्गों से Enums उपयोग करने की अनुमति है, और सभी मैं करना था Core.ENUMNAME.ENUMVALUE की तरह कुछ था।

मुझे आशा है कि मैं जो करना चाहता हूं वह स्पष्ट है: \ जैसा कि मुझे नहीं पता कि सही शब्दावली कितनी है।

उत्तर

40

उपयोग

core.gameMode = Core::INIT; 

एक गणन के व्यक्तिगत मूल्यों कि गणन के भीतर लेकिन गणन खुद के स्तर पर ही नहीं scoped रहे हैं। यह कुछ ऐसा है (सी # सहित) सबसे अन्य भाषाओं अलग तरीके से करते है, और इतना है कि वहाँ,

core.gameMode = Core::GAME_MODE::INIT; 

भी कानूनी हो जाएगा C++ 0x दोनों वेरिएंट की अनुमति देगा।

इसके अलावा, दृढ़ता से टाइप किया enums कि C++ 0x (enum class) में जोड़ दिया जाएगा enum को महत्व देता केवल enum के दायरे के भीतर डाल दिया होगा (यानी सी # में के रूप में); इससे आपकी टिप्पणी में आपने जो समस्या देखी है, वह हल करता है कि "सामान्य" enums के लिए, enum मानों के लिए पहचानकर्ताओं को एक ही दायरे में परिभाषित सभी enums में अद्वितीय होना चाहिए।

+0

मीठे काम किया! कि :) के लिए धन्यवाद अब मैं वहाँ Enums अलग-अलग नामों के लिए अगर वे एक ही नाम स्थान – ChiggenWingz

+0

@ChiggenWingz में हैं की आवश्यकता होगी, के बारे में इतने सारे विषय हैं देख सकते हैं: अच्छा अवलोकन - C++ 0x की प्रबलता से टाइप किये enums में मदद मिलेगी यह संबंध (और मैंने इस पर चर्चा करने के लिए उत्तर अपडेट किया है)। –

संबंधित मुद्दे