Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Другие библиотеки _ Паттерн одиночка не компилится

Автор: haiflive 2.10.2010, 15:00

Помогите пожалуйста с паттерном одиночка, не компилируется..
пример взят из книги "Гамма Э., Хелм Р., Джонсон Р. - Приемы объектно-ориентированного проектирования. Паттерны проектирования (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()'


Компилятор mingw-gcc, ОС WIN7-32

Автор: MoPDoBoPoT 2.10.2010, 15:04

Описание и реализацию класса надо разносить по разным файлам (.h и .cpp). Инициализацию статических переменных производить в .cpp файле.

Автор: haiflive 2.10.2010, 15:21

Не помогло. :(

Компилятор явно не указывает на какие-либо ошибки, ошибка в этой строке

        _inst = new Singleton;

Но что здесь не так не могу понять, почему не компилируется?

Вобще они и так были разделены.. Но всёравно спасибо, я как-то не задумывлся раньше об этом, всегда разделял..

Автор: BRE 2.10.2010, 15:53

Так конструктор декларирован, но не реализован.
Сделай хотя бы так:

class Singleton
{
public:
   static Singleton* Inst();

protected:
   Singleton() {}

private:
   static Singleton* _inst;

};


Автор: MoPDoBoPoT 2.10.2010, 16:01

Кстати, на форуме есть http://www.forum.crossplatform.ru/index.php?showtopic=678&hl=singleton, где все достаточно хорошо расписано.

Автор: haiflive 2.10.2010, 16:17

Объявление конструктора помогло, спасибо..

Странно что в "Такой книге" ничего про это не сказанно.. может с тех времён компиляторы изменились или когда переводили на русский ошиблись?..

Всем спасибо тему можно закрыть.

Автор: BRE 2.10.2010, 22:41

Цитата(haiflive @ 2.10.2010, 17:17) *
Странно что в "Такой книге" ничего про это не сказанно.. может с тех времён компиляторы изменились или когда переводили на русский ошиблись?..

В таких книгах это само собой разумеющееся, т.е. предполагается что читатель уже знает C++. :)

Автор: AD 2.10.2010, 23:33

Блин, люди. Предлагаю штрафовать тех, кто даже в названии темы не может соблюсти элементарные правила грамматики. Прошу поправить название темы. Орфографическая ошибка в слове "паттерн".

Автор: MoPDoBoPoT 2.10.2010, 23:50

Злобный мальчик, шоль?)
А вообще, это явная опечатка, с каждым бывает. На данный момент ТС не может изменить текст даже собственных сообщений, ибо их всего 14.

Автор: AD 3.10.2010, 1:58

Цитата(MoPDoBoPoT @ 3.10.2010, 0:50) *
Злобный мальчик, шоль?)
А вообще, это явная опечатка, с каждым бывает. На данный момент ТС не может изменить текст даже собственных сообщений, ибо их всего 14.

Это обращение было и к модераторам тоже. Я думаю, что не стоит быть поспешным в названии темы. Пусть соблюдают простейшие правила языка. Я могу понять опечатки в тексте сообщений, но уж тему по-человечески назвать человек просто обязан.

Автор: zloiia 23.7.2012, 8:03

Цитата(haiflive @ 2.10.2010, 16:00) *
Помогите пожалуйста с паттерном одиночка, не компилируется..
пример взят из книги "Гамма Э., Хелм Р., Джонсон Р. - Приемы объектно-ориентированного проектирования. Паттерны проектирования (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()'


Компилятор mingw-gcc, ОС WIN7-32


Немного с опозданием, но вопрос - почему не стали использовать синглтон Майерса? Как по мне так он проще и заодно потокобезопасен

Автор: Алексей1153 23.7.2012, 11:29

да да, мне он тоже больше по душе :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)