C ++ Singleton无法在Mac OS上链接

时间:2012-08-24 03:11:30

标签: c++ macos

我正在尝试使用Xcode在C ++,Mac OS上创建一个非常经典的单例 我创建了Class MySingleton,如下所示:

class MySingleton{
private:
    int val;
    static MySingleton *instance;
    MySingleton(){
        val = 0;
    }
public:
    int getVal(){
        return val;
    }
    void setVal(int iVal){
        val = iVal;
    }
    static MySingleton* getInstance(){
        if(instance == NULL)
            instance = new MySingleton();
        return instance;
    }

};

Linker抱怨静态MySingleton * getInstance() 按照链接器消息:

  

架构x86_64的未定义符号:“MySingleton :: instance”,   引自:         main.o中的MySingleton :: getInstance()ld:找不到架构x86_64 clang的符号:错误:链接器命令失败并带有退出代码   1(使用-v查看调用)

有人可以帮忙吗?也许我需要在Xcode上设置一些东西,顺便说一下版本是4.2.1,而我无法做到这一点。 感谢。

3 个答案:

答案 0 :(得分:5)

您需要在cpp文件中定义静态变量,如下所示:

MySingleton *MySingleton::instance = 0;

答案 1 :(得分:1)

需要在cpp文件中定义静态成员MySingleton。在标题中,您只声明了它。有关详情,请参阅此处:Why do static variables need to be declared twice in C++

答案 2 :(得分:1)

据我所见,您已声明static MySingleton *instance,但未在任何地方定义。