2013-03-24 154 views
-1

我试图端口这个Java单例类C++: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链接器错误发生。

+1

请准确显示链接器错误是什么。 – seand 2013-03-24 08:04:00

回答

5

确保您定义的static成员的声明外:

Singleton* Singleton::uniqueInstance = nullptr; 
+3

你也应该初始化为nullptr。 – 2013-03-24 08:59:34

+0

@AlexChamberlain为什么?我的程序在没有使用nullptr的情况下没有错误地编译! – 2013-03-24 09:59:12

+1

@Khajavi还没有高度优化?指针在初始化时不保证为零。 – 2013-03-24 18:10:04

2

你的CPP文件可能不为静态实例预留空间,则需要添加 Singelton* Singleton::uniqueInstance = NULL;到您的CPP文件,然后将它分配第一个电话