Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
1

Написать шаблон класса очередь, и сделать к типу char спецификацию

19.08.2014, 12:25. Просмотров 800. Ответов 9
Метки нет (Все метки)

по заданию, нужно написать шаблон класса очередь, и сделать к типу char спецификацию, вот тут сообственно и начинаются проблемы, сам шаблон класса я написал и он работает, однако отдельное описание под 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
using namespace std;
#include <iomanip>
 
template <class T, int maxsize>
struct MyStruct
{
    int x;
    MyStruct<T, maxsize> *Next;
};
 
template <class T, int maxsize>
class Listop
{
private:
    int size;
    MyStruct<T, maxsize> *Head;
    MyStruct<T, maxsize> *Tail;
public:
    Listop() :Head(NULL), Tail(NULL), size(0){};
    ~Listop();
    void ListopPush(const T);
    void PrintListop(int size);
    void ListopPop();
    int Count();
 
 
};
 
template <class T, int maxsize>
Listop<T, maxsize>::~Listop()
{
    while (size != 0)
    {
        MyStruct <T, maxsize>*temp = Head->Next;
        delete Head;
        Head = temp;
        size--;
    }
}
 
template <class T, int maxsize>
int Listop<T, maxsize>::  Count()
{
    return size;
}
 
template <class T, int maxsize>
void Listop<T, maxsize>::ListopPush(const T x)
{
    size++;
 
    MyStruct<T, maxsize> *temp = new MyStruct<T, maxsize>;
    temp->Next = Head;
    temp->x = x;
 
    if (Head != NULL)
    {
        Tail->Next = temp;
        Tail = temp;
    }
    else Head = Tail = temp;
}
 
 
template <class T, int maxsize>
void Listop<T, maxsize>::PrintListop(int temp)
{
    MyStruct<T, maxsize> *templist = Head;
    temp = size;
    while (temp != 0)
    {
        cout << templist->x << " ";
        templist = templist->Next;
        temp--;
    }
}
 
template <class T, int maxsize>
void Listop<T, maxsize>::ListopPop()
{
    if (size != 0)
    {
        MyStruct <T, maxsize>*temp = Tail->Next;
        delete Tail;
        Tail = temp;
        size--;
    }
    else cout << "list have no elements" << endl;
}
 
template <class T, int maxsize>
class Listop<char, maxsize>
{
 
private:
    int size;
    MyStruct<T, maxsize> *Head;
    MyStruct<T, maxsize> *Tail;
public:
    Listop() :Head(NULL), Tail(NULL), size(0){};
    ~Listop();
    void ListopPush(const T);
    void PrintListop(int size);
    void ListopPop();
    int Count();
};
 
template <char T, int maxsize>
void Listop<T, maxsize>::ListopPush(const T x)
{
    size++;
 
    MyStruct<T, maxsize> *temp = new MyStruct<T, maxsize>;
    temp->Next = Head;
    temp->x = x;
 
    if (Head != NULL)
    {
        Tail->Next = temp;
        Tail = temp;
    }
    else Head = Tail = temp;
}
 
template <char T, int maxsize>
void Listop<T, maxsize>::PrintListop(int temp)
{
    MyStruct<T, maxsize> *templist = Head;
    temp = size;
    while (temp != 0)
    {
        cout << templist->x << " ";
        templist = templist->Next;
        temp--;
    }
}
 
template<char T, int maxsize>
void Listop<T, maxsize>::ListopPop()
{
    if (size != 0)
    {
        MyStruct <T, maxsize>*temp = Tail->Next;
        delete Tail;
        Tail = temp;
        size--;
    }
    else cout << "list have no elements" << endl;
}
вот это последний вариант и он выдает постоянные ошибки, которые я не в состоянии решить. кто может помочь, буду очень благодарен
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2014, 12:25
Ответы с готовыми решениями:

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char -...

Шаблон класса очередь
Привет всем. При создании шаблона класса столкнулся со следующими проблемами: при использовании...

Создать шаблон класса очередь
Создать шаблон класса очередь . Написать программу,демонстрирующую работу с этим шаблоном для...

Создать шаблонную очередь и инстанцировать её для своего класса, представляющего строку на базе vector<char>
Была задача создать шаблонную очередь (я это сделал) и инстанцировать её для своего класса,...

Разработать шаблон класса "Очередь"
Люди, помогите пожалуйста, последняя лаба осталась, ни как не могу решить! Тема: Шаблоны Классов....

9
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.08.2014, 12:49 2
Лучший ответ Сообщение было отмечено Рейвол как решение

Решение

C++
1
2
3
4
5
template <int maxsize>
class Listop<char, maxsize>
{
   //
};
И заменяем все упоминания T в классе и в реализации функций просто на char.
Например:
C++
1
2
template <int maxsize>
void Listop<char, maxsize>::ListopPush(const char x)
Более простой вариант просто затайпдефить char как T.
C++
1
2
3
4
5
6
template <int maxsize>
class Listop<char, maxsize>
{
   typedef char T;
   //
};
Но объявление функций все равно придется переделать, а именно шаблоны для них.
1
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
19.08.2014, 12:50 3
Цитата Сообщение от Рейвол Посмотреть сообщение
сделать к типу char спецификацию
это специализация называется
C++
1
2
template<int maxsize>
Listop<char, maxsize>
0
John Prick
836 / 767 / 258
Регистрация: 27.07.2012
Сообщений: 2,179
Завершенные тесты: 3
19.08.2014, 12:51 4
В параметрах шаблона указывай только maxsize, а далее как у тебя:
C++
1
2
3
4
5
6
7
8
template <int maxsize>
class Listop<char, maxsize>
{
//...
}
 
template<int maxsize>
void Listop<char, maxsize>::func(void) { ... }
0
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
19.08.2014, 12:56  [ТС] 5
ForEveR, ошибки пропали, но появилась следующие:
error LNK2019
error LNK1120
0
John Prick
836 / 767 / 258
Регистрация: 27.07.2012
Сообщений: 2,179
Завершенные тесты: 3
19.08.2014, 12:58 6
На сколько я вижу, нет реализации функции Count()
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.08.2014, 13:04 7
Рейвол, Нет реализации деструктора и функции Count для специализированного шаблона.
0
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
19.08.2014, 13:09  [ТС] 8
ForEveR,
C++
1
2
3
4
5
template<int maxsize>
void Listop<char, maxsize>::Count()
{
    return size;
}
я сделал реализацию Count по тому же образу что и в общем варианте шаблона, но тут получается ошибка
Ошибка 2 error C2244: Listop<char,maxsize>::Count: не удается сопоставить определение функции существующему объявлению
эта ошибка связана с тем, что я определяю тип как char?
0
John Prick
836 / 767 / 258
Регистрация: 27.07.2012
Сообщений: 2,179
Завершенные тесты: 3
19.08.2014, 13:17 9
Цитата Сообщение от Рейвол Посмотреть сообщение
не удается сопоставить определение функции существующему объявлению
В объявлении у тебя int возвращает, а в реализации почему-то void.
1
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
19.08.2014, 13:22  [ТС] 10
John Prick, ой точно, мой косяк, не заметил

Добавлено через 3 минуты
все, теперь все работает, всем спасибо, тема закрыта
0
19.08.2014, 13:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 13:22

Шаблон класса "очередь с приоритетами"
Здравствуйте, необходимо создать шаблон класса &quot;очередь с приоритетами&quot;. При добавлении элемента в...

Шаблон класса "очередь с приоритетами"
Здравствуйте, небходимо создать шаблон класса &quot;очередь с приоритетами&quot;. При добавлении элемента в...

Шаблон класса "Очередь"
описать класс:очередь (динамическая структура) тип данных:int,double,float.в каждом классе должны...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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