Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Паттерн одиночка не компилится
Форум на CrossPlatform.RU > Библиотеки > Другие библиотеки
haiflive
Помогите пожалуйста с паттерном одиночка, не компилируется..
пример взят из книги "Гамма Э., Хелм Р., Джонсон Р. - Приемы объектно-ориентированного проектирования. Паттерны проектирования (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
Описание и реализацию класса надо разносить по разным файлам (.h и .cpp). Инициализацию статических переменных производить в .cpp файле.
haiflive
Не помогло. :(

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

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

Вобще они и так были разделены.. Но всёравно спасибо, я как-то не задумывлся раньше об этом, всегда разделял..
BRE
Так конструктор декларирован, но не реализован.
Сделай хотя бы так:
class Singleton
{
public:
   static Singleton* Inst();

protected:
   Singleton() {}

private:
   static Singleton* _inst;

};

MoPDoBoPoT
Кстати, на форуме есть тема про одиночку, где все достаточно хорошо расписано.
haiflive
Объявление конструктора помогло, спасибо..

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

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

В таких книгах это само собой разумеющееся, т.е. предполагается что читатель уже знает C++. :)
AD
Блин, люди. Предлагаю штрафовать тех, кто даже в названии темы не может соблюсти элементарные правила грамматики. Прошу поправить название темы. Орфографическая ошибка в слове "паттерн".
MoPDoBoPoT
Злобный мальчик, шоль?)
А вообще, это явная опечатка, с каждым бывает. На данный момент ТС не может изменить текст даже собственных сообщений, ибо их всего 14.
AD
Цитата(MoPDoBoPoT @ 3.10.2010, 0:50) *
Злобный мальчик, шоль?)
А вообще, это явная опечатка, с каждым бывает. На данный момент ТС не может изменить текст даже собственных сообщений, ибо их всего 14.

Это обращение было и к модераторам тоже. Я думаю, что не стоит быть поспешным в названии темы. Пусть соблюдают простейшие правила языка. Я могу понять опечатки в тексте сообщений, но уж тему по-человечески назвать человек просто обязан.
zloiia
Цитата(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
да да, мне он тоже больше по душе :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.