2011-12-31 14 views
2

私は何が間違っているのか分かりません、私はすべてが正確に一度定義され、すべてが正しくリンクされていると思ったが、リンカエラー - 助けてください:エラーLNK2001:未解決の外部シンボル

1>StaticElements.obj : error LNK2001: unresolved external symbol "private: static int Powerup_Health::g_refCount" ([email protected][email protected]@0HA) 
1>StaticElements.obj : error LNK2001: unresolved external symbol "private: static class DBModel * Powerup_Health::g_pModel" ([email protected][email protected]@[email protected]@A) 
1>StaticElements.obj : error LNK2001: unresolved external symbol "private: static int Powerup_QuadDamage::g_refCount" ([email protected][email protected]@0HA) 
1>StaticElements.obj : error LNK2001: unresolved external symbol "private: static class DBModel * Powerup_QuadDamage::g_pModel" ([email protected][email protected]@[email protected]@A) 

コード:

StaticElements.h

を...

ここに私のコンパイラは私に与えますエラーです

StaticElements.cpp

#include "StdAfx.h" 

#include "StaticElements.h" 

#include "Level.h" 

#include "DBModel.h" 

#include "Powerup_Health.h" 
#include "Powerup_QuadDamage.h" 


void StaticElements::PreLevelInitialisation(Level* pLevel) 
{ 
//////POWERUPS 
    Powerup_Health::InitModel(); 
    m_pPwrHealth = new Powerup_Health(); 
    pLevel->AddChild(m_pPwrHealth); 

    Powerup_QuadDamage::InitModel(); 
    m_pPwrQuadDamage = new Powerup_QuadDamage(); 
    pLevel->AddChild(m_pPwrQuadDamage); 
} 

Powerup_QuadDamage.h

#pragma once 

#include "Powerup.h" 

class Powerup_QuadDamage : public Powerup 
{ 
private: 
    //static 
    static DBModel* g_pModel; 
    static int g_refCount; 

public: 
    virtual ~Powerup_QuadDamage() { 
     --g_refCount; 
     if (g_refCount == 0) delete g_pModel; 
    } 

    Powerup_QuadDamage() 
     :Powerup(g_pModel, 90.0f) 
    { 
     ++g_refCount; 
    } 

    static void InitModel() { 
     g_refCount = 0; 

     DBModelDesc desc; 
     g_pModel = new DBModel(desc, nullptr); 
    } 

private: 
    //disabled 
    Powerup_QuadDamage(const Powerup_QuadDamage& b); 
    Powerup_QuadDamage& operator= (const Powerup_QuadDamage& b); 
}; 

Powerup_Health.h

#pragma once 

#include "Powerup.h" 

class Powerup_Health : public Powerup 
{ 
private: 
    //static 
    static DBModel* g_pModel; 
    static int g_refCount; 

public: 
    virtual ~Powerup_Health() { 
     --g_refCount; 
     if (g_refCount == 0) delete g_pModel; 
    } 

    Powerup_Health() 
     :Powerup(g_pModel, 20.0f) 
    { 
     ++g_refCount; 
    } 

    static void InitModel() { 
     g_refCount = 0; 

     DBModelDesc desc; 
     g_pModel = new DBModel(desc, nullptr); 
    } 

private: 
    //disabled 
    Powerup_Health(const Powerup_Health& b); 
    Powerup_Health& operator= (const Powerup_Health& b); 
}; 

誰でもエラーの原因と解決方法を教えてもらえますか? ありがとう。

+1

:あなたののcppファイルに次のようなものを追加します。 –

+0

@RaymondChenどのようにそう?説明してください? – xcrypt

+1

[この質問に対する回答](http://stackoverflow.com/questions/806846/query-on-static-member-variables-of-a-class-in-c)について説明します。 –

答えて

7

静的メンバー変数は、モジュールレベルで明示的に初期化する必要があります。あなたは `Powerup_Health :: g_refCount`(など)の宣言が、無定義を持っている

int Powerup_Health::g_refCount = 0; 
+0

それはまたヘッダーで定義することができますか? – xcrypt

+0

一般的に、1つのコンパイル単位にしか表示されないようにします。 –

+0

Powerup_Healthを他の多くのクラスに含めると、これらのcppファイルに静的な初期化が必要なのでしょうか? trueの場合は痛いと思われます... – Nigel

関連する問題