2009-07-14 13 views
1

可能性の重複:
Undefined reference - C++ linker error未定義の参照のエラーメッセージ - C++

今、私は 'GlobalClass :: s_instance'、および「GlobalClassに「未定義の参照のエラーメッセージが出てい::それぞれこれらのステートメント上のインスタンス()」、:?

GlobalClass *GlobalClass::s_instance = 0; 

GlobalClass::instance()->set_value(myAddress); \\ <== undefined reference  
std::cout << "====>address is is " << GlobalClass::instance()->get_value() 

任意のアイデアのコードを以下に示します。

================================

#ifndef GLOBALCLASS_H_ 
#define GLOBALCLASS_H_ 

#include <string> 
class GlobalClass { 

public: 

    std::string get_value(); 

    void set_value(std::string); 

    static GlobalClass *instance(); 

    static GlobalClass *s_instance; 

private: 

    std::string m_value; 
}; 

#endif /* GLOBALCLASS_H_ */ 

=========================================== ====

#include <string> 
#include "GlobalClass.h" 



/* 
GlobalClass(int v = 0) 
{ 
m_value = v; 
} 
*/ 

    static GlobalClass *s_instance; 

    std::string GlobalClass::get_value() 
    { 
     return m_value; 
    } 

    void GlobalClass::set_value(std::string v) 
    { 
     m_value = v; 
    } 

    static GlobalClass *instance() { 
     if (!s_instance) 
       s_instance = new GlobalClass; 
     return s_instance; 
    } 

=======================================あなたのCPPファイルで====================

#include <iostream> 
#include "GlobalClass.h" 

using namespace std; 

int main() { 

    GlobalClass::s_instance = 0; \\ <== undefined reference 


    std::string myAddress = "abc"; 
    GlobalClass::instance()->set_value(myAddress); \\ <== undefined reference 

    std::cout << "====>address is is " << GlobalClass::instance()->get_value() 
    \\ <== undefined reference 

       << std::endl; 
    return 0; 

}

+0

正確な複製:http://stackoverflow.com/questions/1122938/undefined-reference-c-linker-error –

+0

これは違うエラーですが、他の質問と同じ問題ですそこに答えを掲示し、これを閉じるために投票する。 –

+1

いいえ、問題ありません。私はそれで何をすべきか分からなかった。 –

答えて

2

アレックス・ブラック氏の回答に加えて、GlobalClass :: instance()関数には実装がないという不満があります。それはない:それは本当にあるべき

static GlobalClass *instance() { 
     if (!s_instance) 
       s_instance = new GlobalClass; 
     return s_instance; 
    } 

GlobalClass *GlobalClass::instance() { 
      if (!s_instance) 
        s_instance = new GlobalClass; 
      return s_instance; 
     } 

それは静的であっても、それはまだメンバ関数であることを忘れてはいけません!

+0

それはおそらくそれでした。 Sheesh! –

2

、メートルove "Global :: s_instance = 0;" main()の外側で、静的な接頭辞を付けます。

static Global::s_instance = 0; 
int main() 
{ 
... 
}