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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
#1

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

13.03.2011, 02:00. Просмотров 830. Ответов 0
Метки нет (Все метки)

Нужно реализовать класс двусторонняя очередь- дек на шаблонах работающий для целых типов и для строк типа 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++
Имеется задание: Создать свой шаблонный класс – динамический массив (myvector). Создать методы этого класса. Инстанцировать для своего...

Специализация шаблонного класса - C++
Здравствуйте ! Задача: нужно &quot;вытянуть&quot; тип переменной из списка аргументов конструктора (см. текст). Возможно ли, вообще, такое ?...

Явная специализация класса - C++
Код переписан из книги, однако не компилируется. Что не так со специализацией класса? // Явная специализация класса. #include...

Явная специализация шаблонного класса - C++
Всем привет, не могу разобраться с определением функций-членов для явной специализации Имеем след. код: template &lt;class Type&gt; class A...

Явная специализация шаблона класса и ее методы - C++
На 93 строке явная специализация шаблона класса под char. Но я нигде не могу найти, как мне правильно записать методы для него. Если тело...

Специализация метода темплейтного класса вложенного в темплейтный класс - C++
Есть два темплейтных класса template &lt;bool T2&gt; class B { void b(); } template &lt;&gt; void B&lt;true&gt;::b() {}

Шаблоны методов класса - C++
Здравствуйте, подскажите, можно ли в С++ сделать шаблон отдельного метода класса ? т.е. нужно что-то типа подобного: class MyClass ...

Не разбиваются шаблоны класса на файлы - C++
Всем привет. Изучаю С++, всегда разбивал свои программы на файлы и радовался, но тут начал изучать шаблоны классов, и ничего не выходит,...

Шаблоны массива класса array (объяснить) - C++
Здравствуйте, я не могу понять, что означает шаблон класса array..Вот само задание: &quot;13. Объявите следующие объекты данных а. actor —...

Шаблоны классов, перегрузка operator<< класса ostream - C++
Не компилируется программа. fatal error: 1 unresolved externals Как правильно определить operator&lt;&lt; ??? #include &lt;iostream&gt; ...

Шаблоны классов: непонятная ошибка в одном из методов класса - C++
Задача создать шаблон двоичного дерева поиска. В методе удаления узла IntelliSense выдает ошибку: ссылается на if и пишет: &quot;требуется...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru