2013-04-17 8 views
13

LNK2001 त्रुटि: अनसुलझे बाह्य प्रतीक" निजी: स्थिर वर्ग irrklang :: ISoundEngine * GameEngine :: ध्वनि :: _ soundDevice "(_soundDevice @ ध्वनि @ GameEngine @@ 0PAVISoundEngine @ irrklang @@ एक)LNK2001 त्रुटि: अनसुलझे बाह्य प्रतीक "निजी: स्थिर वर्ग

मैं यह पता लगाने नहीं कर सकते क्यों मैं इस त्रुटि मिल रही है। मेरा मानना ​​है कि मैं सही ढंग से initialising कर रहा हूँ। किसी को भी एक हाथ उधार दे सकते हैं?

sound.h

class Sound 
{ 
private: 
    static irrklang::ISoundEngine* _soundDevice; 
public: 
    Sound(); 
    ~Sound(); 

    //getter and setter for _soundDevice 
    irrklang::ISoundEngine* getSoundDevice() { return _soundDevice; } 
// void setSoundDevice(irrklang::ISoundEngine* value) { _soundDevice = value; } 
    static bool initialise(); 
    static void shutdown(); 

एचटीएमएल प्रलेख

namespace GameEngine 
{ 
Sound::Sound() { } 
Sound::~Sound() { } 

bool Sound::initialise() 
{ 
    //initialise the sound engine 
    _soundDevice = irrklang::createIrrKlangDevice(); 

    if (!_soundDevice) 
    { 
     std::cerr << "Error creating sound device" << std::endl; 
     return false; 
    } 

} 

void Sound::shutdown() 
{ 
    _soundDevice->drop(); 
} 

और जहां मैं ध्वनि डिवाइस का उपयोग

GameEngine::Sound* sound = new GameEngine::Sound(); 

namespace GameEngine 
{ 
bool Game::initialise() 
{ 
    /// 
    /// non-related code removed 
    /// 

    //initialise the sound engine 
    if (!Sound::initialise()) 
     return false; 

किसी भी मदद होगी बहुत सराहना

उत्तर

40

sound.cpp में इस रखो:

irrklang::ISoundEngine* Sound::_soundDevice; 

नोट : आप आरंभ करना चाहते हैं यह रूप में अच्छी तरह, उदाहरण के लिए:

irrklang::ISoundEngine* Sound::_soundDevice = 0; 

static, लेकिन गैर const डेटा सदस्यों वर्ग परिभाषा के बाहर और नाम स्थान वर्ग enclosing अंदर परिभाषित किया जाना चाहिए। सामान्य अभ्यास इसे अनुवाद इकाई (*.cpp) में परिभाषित करना है क्योंकि इसे कार्यान्वयन विवरण माना जाता है। केवल static और const अभिन्न प्रकार घोषित किया जा सकता है और एक ही समय में परिभाषित (वर्ग परिभाषा के अंदर):

class Example { 
public: 
    static const long x = 101; 
}; 

इस मामले में आप x परिभाषा को जोड़ने के लिए है, क्योंकि यह पहले से ही वर्ग परिभाषा के अंदर परिभाषित किया गया है की जरूरत नहीं है। हालांकि, आपके मामले में यह आवश्यक है। सी ++ स्टैंडर्ड की खंड 9.4.2 से निकालें:

एक स्थिर डेटा सदस्य एक namespace गुंजाइश सदस्य के वर्ग परिभाषा enclosing में प्रदर्शित करेगा परिभाषा।

+0

बिल्कुल सही! अब संकलित और अपेक्षित परिणाम प्राप्त कर सकते हैं। आपका बहुत बहुत धन्यवाद। – rkleman12

2

आखिरकार, @ एलेक्सेंडर द्वारा दिए गए उत्तर ने मेरे अपने कोड में एक समान समस्या हल की, लेकिन कुछ परीक्षणों के बिना नहीं। अगले विज़िटर के लाभ के लिए, जब वह कहता है, "इसे sound.cpp में रखें," पूरी तरह से स्पष्ट होने के लिए, यह sound.h में पहले से मौजूद है इसके अतिरिक्त है।

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