2009-07-14 55 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; 
    } 

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

#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 – 2009-07-14 01:31:34

+0

我知道这是一个不同的错误,但它是同样的问题,因为你的其他问题,所以我在那里张贴答案并投票结束这一问题。 – 2009-07-14 01:37:32

回答

2

而且亚历克斯黑的响应,其抱怨GlobalClass ::实例()函数没有实现。它不:

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

不要忘了,即使它是静态的它仍然是一个成员函数!

2

在你的CPP文件中,男ove“Global :: s_instance = 0;”在main()之外,并以静态为前缀。

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