-1

我正在尝试将此 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 链接器错误。

4

2 回答 2

7

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

Singleton* Singleton::uniqueInstance = nullptr;
于 2013-03-24T08:06:10.897 回答
2

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

于 2013-03-24T08:07:19.690 回答