Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Паттерн Singleton, Не момпилируется пример 
V
    Опции темы
nyxiscoo1
Дата 20.7.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



Уважаемые форумчане сильно ногами не пинайте так как я новичек в С++.
Хочу создать клас одиночку(singleton) на вики вычитал следующий пример:
Код

#include <iostream>
 
template<typename T> class Singleton
{
  public:
    static T& Instance()
    {
        static T theSingleInstance;  // assumes T has a protected default constructor
        return theSingleInstance;
    }
    virtual ~Singleton();            //a virtual destructor is needed if we need to execute
                                     //code in the derived class' destructor. 
};
 
class OnlyOne : public Singleton<OnlyOne>
{
    friend class Singleton<OnlyOne>;
    int example_data;
  public:
    int Getexample_data() const {return example_data;}
  protected: 
    OnlyOne(): example_data(42) {}   // default constructor 
};

Но при компиляции студией выскакивает ошибка:
error LNK2019: unresolved external symbol "public: virtual __thiscall Singleton<class OnlyOne>::~Singleton<class OnlyOne>(void)" (??1?$Singleton@VOnlyOne@@@@UAE@XZ) referenced in function "public: virtual __thiscall OnlyOne::~OnlyOne(void)" (??1OnlyOne@@UAE@XZ)

Попробовал написать свою реализацию:
Код

class Singleton
{
public:
    static Singleton* Instance();
    ~Singleton(void) {}

protected:
    Singleton(void) {}

private:
    static Singleton* _instance;
};

Singleton* Singleton::Instance()
{
    if (_instance == 0)
    {
        _instance = new Singleton();
    }
    return _instance;
}


Но при компиляции тоже выскакивает ошибка:
error LNK2001: unresolved external symbol "private: static class Singleton * Singleton::_instance" (?_instance@Singleton@@0PAV1@A)

Подскажите пожалуйста, что я делаю не так smile 
Уже целый час с этим вожусь smile 
PM   Вверх
Daevaorn
Дата 20.7.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(nyxiscoo1 @  20.7.2008,  15:37 Найти цитируемый пост)
error LNK2019: unresolved external symbol "public: virtual __thiscall Singleton<class OnlyOne>::~Singleton<class OnlyOne>(void)" (??1?$Singleton@VOnlyOne@@@@UAE@XZ) referenced in function "public: virtual __thiscall OnlyOne::~OnlyOne(void)" (??1OnlyOne@@UAE@XZ)

Нету реализации у деструктора базового класса.

Цитата(nyxiscoo1 @  20.7.2008,  15:37 Найти цитируемый пост)
error LNK2001: unresolved external symbol "private: static class Singleton * Singleton::_instance" (?_instance@Singleton@@0PAV1@A)

Не инициализирована статическая переменная `_instance`
PM MAIL WWW   Вверх
nyxiscoo1
Дата 20.7.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



Цитата(Daevaorn @  20.7.2008,  14:41 Найти цитируемый пост)
Нету реализации у деструктора базового класса.

Спасибо заработало. smile 

Цитата(Daevaorn @  20.7.2008,  14:41 Найти цитируемый пост)
Не инициализирована статическая переменная `_instance`

А где ее необходимо инициализировать? smile 
PM   Вверх
W4FhLF
Дата 20.7.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Цитата(nyxiscoo1 @  20.7.2008,  14:53 Найти цитируемый пост)
А где ее необходимо инициализировать?


В файле реализации класса Singleton напиши:

Код

Singleton* Singleton::_instance = 0;



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
nyxiscoo1
Дата 20.7.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



Цитата(W4FhLF @  20.7.2008,  15:03 Найти цитируемый пост)
В файле реализации класса Singleton напиши:код C++1:Singleton* Singleton::_instance = 0;

Компилятор ругается:
error C2864: 'Singleton::_instance' : only static const integral data members can be initialized within a class  smile 

PM   Вверх
mes
Дата 20.7.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(nyxiscoo1 @  20.7.2008,  14:37 Найти цитируемый пост)
private:
    static Singleton* _instance;


 я бы заменил на
Код

Singleton&* _instance () { static Singleton* instance; return &instance; }


тогда не надо определять ее вне класса 



--------------------
PM MAIL WWW   Вверх
W4FhLF
Дата 20.7.2008, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Цитата(nyxiscoo1 @  20.7.2008,  15:06 Найти цитируемый пост)
Компилятор ругается:error C2864: 'Singleton::_instance' : only static const integral data members can be initialized within a class  


Код

class Singleton
{
public:
    static Singleton* Instance();
    ~Singleton(void) {}

protected:
    Singleton(void) {}

private:
    static Singleton* _instance;
};

Singleton* Singleton::Instance()
{
    if (_instance == 0)
    {
        _instance = new Singleton();
    }
    return _instance;

}

Singleton* Singleton::_instance = 0;



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
nyxiscoo1
Дата 20.7.2008, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



Всем спасибо, вопрос решен. Примного балгодарен smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.