Помогите пожалуйста с паттерном одиночка, не компилируется..
пример взят из книги "Гамма Э., Хелм Р., Джонсон Р. - Приемы объектно-ориентированного проектирования. Паттерны проектирования (2001)(ru)"
class Singleton
{
public:
static Singleton* Inst();
protected:
Singleton();
private:
static Singleton* _inst;
};
Singleton* Singleton::_inst = 0;
Singleton* Singleton::Inst()
{
if(_inst == 0)
{
_inst = new Singleton;
}
return _inst;
}
debug/main.o:C:\projects\tests\protopypes\ibs_parser-build-desktop/../../../../Qt/projects/tests/protopypes/ibs_parser/main.cpp:22: undefined reference to `Singleton::Singleton()'
Описание и реализацию класса надо разносить по разным файлам (.h и .cpp). Инициализацию статических переменных производить в .cpp файле.
Не помогло.
Компилятор явно не указывает на какие-либо ошибки, ошибка в этой строке
_inst = new Singleton;
Так конструктор декларирован, но не реализован.
Сделай хотя бы так:
class Singleton
{
public:
static Singleton* Inst();
protected:
Singleton() {}
private:
static Singleton* _inst;
};
Кстати, на форуме есть http://www.forum.crossplatform.ru/index.php?showtopic=678&hl=singleton, где все достаточно хорошо расписано.
Объявление конструктора помогло, спасибо..
Странно что в "Такой книге" ничего про это не сказанно.. может с тех времён компиляторы изменились или когда переводили на русский ошиблись?..
Всем спасибо тему можно закрыть.
Блин, люди. Предлагаю штрафовать тех, кто даже в названии темы не может соблюсти элементарные правила грамматики. Прошу поправить название темы. Орфографическая ошибка в слове "паттерн".
Злобный мальчик, шоль?)
А вообще, это явная опечатка, с каждым бывает. На данный момент ТС не может изменить текст даже собственных сообщений, ибо их всего 14.
class Singleton
{
public:
static Singleton* Inst();
protected:
Singleton();
private:
static Singleton* _inst;
};
Singleton* Singleton::_inst = 0;
Singleton* Singleton::Inst()
{
if(_inst == 0)
{
_inst = new Singleton;
}
return _inst;
}
debug/main.o:C:\projects\tests\protopypes\ibs_parser-build-desktop/../../../../Qt/projects/tests/protopypes/ibs_parser/main.cpp:22: undefined reference to `Singleton::Singleton()'
да да, мне он тоже больше по душе
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)