代码之家  ›  专栏  ›  技术社区  ›  Jack BeNimble

未定义的引用错误消息-C++[重复]

  •  1
  • Jack BeNimble  · 技术社区  · 17 年前

    可能重复:
    Undefined reference - C++ linker error

    现在,我在以下语句上分别收到“未定义的引用错误消息,指向'GlobalClass::s_instance'和'GlobalClass::instance()':

    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;
    

    }

    2 回复  |  直到 9 年前
        1
  •  2
  •   waterlooalex    17 年前

    除了Alex Black的回应,它还抱怨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;
            }
    

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

        2
  •  2
  •   Goz    17 年前

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