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

Posted

技术标签:

【中文标题】C++ Singleton 无法在 Mac OS 上链接【英文标题】:C++ Singleton fail to link on Mac OS 【发布时间】:2012-08-24 03:11:29 【问题描述】:

我正在尝试使用 Xcode 在 C++、Mac OS 上创建一个非常经典的单例 我创建类 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;
    

;

链接器抱怨 static MySingleton* getInstance() 按照链接器消息:

架构 x86_64 的未定义符号:“MySingleton::instance”, 参考自: main.old 中的 MySingleton::getInstance():找不到体系结构 x86_64 的符号 clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)

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

【问题讨论】:

据我所知,您已经声明了static MySingleton *instance,但还没有在任何地方定义它。 太傻了!!!!谢谢 ta.speot.is!!! 【参考方案1】:

你需要在你的 cpp 文件中定义静态变量,像这样:

MySingleton *MySingleton::instance = 0;

【讨论】:

【参考方案2】:

静态成员 MySingleton 需要在 cpp 文件中定义。在标题中,您只声明了它。更多信息请参见:Why do static variables need to be declared twice in C++

【讨论】:

【参考方案3】:

据我所知,您已经声明了 static MySingleton *instance,但还没有在任何地方定义它。

【讨论】:

以上是关于C++ Singleton 无法在 Mac OS 上链接的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Xcode 和终端在 Mac OS 上使用 OpenGL 库编译 c++ 文件

在 mac os x sierra 上使用 opencv c++ 编译 hello world

导致 cpp(C 预处理器)删除 Mac OS X 上的 C++ 注释

使用 Qt 在 OS X/Mac 上构建 C++ 库

如何在 Mac OS X 上使用 C++ 播放声音?

如何在 Mac OS 上用 C++ 实现命名管道?