crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Паттерн одиночка не компилится
haiflive
  опции профиля:
сообщение 2.10.2010, 15:00
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 8.7.2010
Пользователь №: 1868

Спасибо сказали: 1 раз(а)




Репутация:   0  


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


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Описание и реализацию класса надо разносить по разным файлам (.h и .cpp). Инициализацию статических переменных производить в .cpp файле.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
haiflive
  опции профиля:
сообщение 2.10.2010, 15:21
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 8.7.2010
Пользователь №: 1868

Спасибо сказали: 1 раз(а)




Репутация:   0  


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

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

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

Вобще они и так были разделены.. Но всёравно спасибо, я как-то не задумывлся раньше об этом, всегда разделял..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 2.10.2010, 15:53
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Так конструктор декларирован, но не реализован.
Сделай хотя бы так:
class Singleton
{
public:
   static Singleton* Inst();

protected:
   Singleton() {}

private:
   static Singleton* _inst;

};

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 2.10.2010, 16:01
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Кстати, на форуме есть тема про одиночку, где все достаточно хорошо расписано.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
haiflive
  опции профиля:
сообщение 2.10.2010, 16:17
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 8.7.2010
Пользователь №: 1868

Спасибо сказали: 1 раз(а)




Репутация:   0  


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

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

Всем спасибо тему можно закрыть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 2.10.2010, 22:41
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


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

В таких книгах это само собой разумеющееся, т.е. предполагается что читатель уже знает C++. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 2.10.2010, 23:33
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Блин, люди. Предлагаю штрафовать тех, кто даже в названии темы не может соблюсти элементарные правила грамматики. Прошу поправить название темы. Орфографическая ошибка в слове "паттерн".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 2.10.2010, 23:50
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Злобный мальчик, шоль?)
А вообще, это явная опечатка, с каждым бывает. На данный момент ТС не может изменить текст даже собственных сообщений, ибо их всего 14.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.10.2010, 1:58
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


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

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

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.6.2022, 23:10