我正在尝试将这个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链接器错误。
答案 0 :(得分:7)
确保在声明之外定义static
成员:
Singleton* Singleton::uniqueInstance = nullptr;
答案 1 :(得分:2)
您的cpp文件可能不会为静态实例保留空间,您需要添加
{c}文件Singelton* Singleton::uniqueInstance = NULL;
,然后在第一次调用中分配