C ++链接器错误Singleton类中的未定义引用

时间:2013-03-24 08:02:39

标签: c++ design-patterns singleton linker-errors

我正在尝试将这个java单例类移植到c ++:

public class Singleton {
private static Singleton uniqueInstance;

private Singleton() {} 
public static Singleton getInstance() {
    if (uniqueInstance == null) {
        uniqueInstance = new Singleton();
    }
        return uniqueInstance;
    }
}

我移植到这个C ++代码:

class Singleton {
private:
  Singleton() {
    cout << "new Singleton is called" << endl;
  }
  static Singleton* uniqueInstance;
public:
   static Singleton* getInstance() {
    if (!uniqueInstance) {
      uniqueInstance = new Singleton();
    }
    return uniqueInstance;
  }
};

但我无法编译这个!并且发生了gcc链接器错误。

2 个答案:

答案 0 :(得分:7)

确保在声明之外定义static成员:

Singleton* Singleton::uniqueInstance = nullptr;

答案 1 :(得分:2)

您的cpp文件可能不会为静态实例保留空间,您需要添加  {c}文件Singelton* Singleton::uniqueInstance = NULL;,然后在第一次调用中分配