Форум программистов, компьютерный форум CyberForum.ru

Шаблоны класса и специализация - C++

Восстановить пароль Регистрация
 
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
13.03.2011, 02:00     Шаблоны класса и специализация #1
Нужно реализовать класс двусторонняя очередь- дек на шаблонах работающий для целых типов и для строк типа char*(без стл).
Возникает проблема при специализации метода.
Вот собственно и сам класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include<iostream>
template<class TInfo>
class TDeque
{
protected:
    struct TDequeItem
    {
        TInfo Info;
        TDequeItem* Next;
        TDequeItem* Prev;
    };
    TDequeItem *Front,*Rear;
    int Size;
    void Erase();
    void Clone(const TDeque &);
    void DeleteItem(TDequeItem*);
    void* PtrByIndex(int)const;
public:
 
    class error{};
    TDeque()
    {
        Front=NULL;Rear=NULL;Size=0;
    }
    TDeque (const TDeque &);
    virtual ~TDeque();
    void InsFront(TInfo);
    void InsRear(TInfo);
    bool DelFront(TInfo &);
    bool DelRear(TInfo &);
    const TDeque& operator = (const TDeque &);
    const TInfo& GetByIndex(unsigned)const;
    void SetByIndex(TInfo,unsigned);
    void Browse(void(TInfo&));
    void Browse(void(TInfo))const;
    void Print()const;
};
template<typename TInfo>void TDeque<TInfo>::DeleteItem(TDequeItem *A)
{
    delete A;
    Size--;
}
template<>void TDeque<char*>::DeleteItem(TDequeItem *A)
{
    delete []A->Info;
    delete A;
    Size--;
}
template<typename TInfo>bool TDeque<TInfo>::DelFront(TInfo &q)
{
    if(Front==NULL)
        return false;
    else
    {
        q=Front->Info;
        TDequeItem*p=Front;
        Front=Front->Next;
//      Front->Prev=NULL;
        DeleteItem(p);
        return true;
    }
}
template<>bool TDeque<char*>::DelFront(char* &a)//Вот проблема в этом месте
{
    if(Front==NULL)
        return false;
    else
    {
        delete[]a;
        a=new char[strlen(Front->Info)+1];
        strcpy(a,Front->Info);
        TDequeItem*p=Front;     
        Front=Front->Next;
//      Front->Prev=NULL;
        DeleteItem(p);
        return true;
    }
}
Текст ошибки:
1>c:\users\admin\documents\visual studio 2008\projects\labrab\deque(template )\deque_header.h(188) : error C2908: explicit specialization; 'bool TDeque<TInfo>::DelFront(TInfo &)' has already been instantiated

В чем проблема и как её исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 02:00     Шаблоны класса и специализация
Посмотрите здесь:

C++ Явная специализация класса
C++ Специализация шаблона класса
Явная специализация, зачем она нужна?(Шаблоны функций) C++
Не разбиваются шаблоны класса на файлы C++
Явное создание экземпляра класса и явная специализация шаблона класса C++
C++ Явная специализация шаблонного класса
Шаблоны методов класса C++
Специализация метода темплейтного класса вложенного в темплейтный класс C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru