2013-04-17 33 views
13

エラーLNK2001:未解決の外部シンボル "プライベート:?静的クラスirrklang :: ISoundEngine * GameEngine ::サウンド:: _ soundDevice"(_soundDevice @サウンド@ GameEngine @@ 0PAVISoundEngine @ irrklang @@ A)エラーLNK2001:未解決の外部シンボル「プライベート:静的クラス

私は、このエラーが発生しますなぜ私が把握することはできません。私は私が正しく初期化しています信じています。誰もが手を貸すことはできますか?

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(); 

sound.cpp

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(); 
} 

と私はすべてのヘルプは大幅に

答えて

40

をいただければ幸いサウンドデバイス

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

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

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

を使用するには、sound.cppにこれを入れて:

irrklang::ISoundEngine* Sound::_soundDevice; 

NOTEを:あなたは初期化したいかもしれませんそれは同様に、例えば:

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

static、しかし非constデータメンバは、クラス定義の外側クラスを囲む名前空間内で定義されるべきです。通常は、実装の詳細と見なされるため、変換単位(*.cpp)で定義することです。のみstaticconst整数型が宣言され、(クラス定義の内側)を同時に定義することができます。この場合、

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

あなたはそれがすでにクラス定義の内部で定義されているのでx定義を追加する必要はありません。しかし、あなたの場合は必要です。 C++標準のセクション9.4.2からの抜粋:

メンバーのクラス定義を囲む名前空間スコープに表示されるものと静的データメンバーの定義を。

+0

完璧!コンパイルして期待した結果を得ることができます。どうもありがとうございました。 – rkleman12

2

最終的に、@Alexanderによって与えられた答えは、私自身のコードで同様の問題を解決しましたが、2,3の試行では解決されませんでした。次の訪問者のために、 "put this into sound.cpp"と言うと、これはsound.hに既に存在するものに加えて、完全にはっきりしています。

関連する問題