2013-03-24 5 views
-1

Я пытаюсь перенести этот класс Java одноплодной на C++:C++ Linker Error Неопределенная ссылка на класс Singleton

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

ответ

5

Убедитесь, что вы определить static элемент вне объявления:

Singleton* Singleton::uniqueInstance = nullptr; 
+3

Вы также должны инициализировать значение nullptr. –

+0

@AlexChamberlain Почему? Моя программа была выполнена без ошибок без использования nullptr! –

+1

@ Хаджави Также без высокой оптимизации? Указатели не инициализируются равными нулю при инициализации. –

2

Ваш файл CPP, вероятно, не резервировать места для статического экземпляра, вам нужно добавить Singelton* Singleton::uniqueInstance = NULL; в файл CPP, а затем передать его в первый звонок

Смежные вопросы