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

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

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

по заданию, нужно написать шаблон класса очередь, и сделать к типу char спецификацию, вот тут сообственно и начинаются проблемы, сам шаблон класса я написал и он работает, однако отдельное описание под char вообще ни как не удается описать:
http://www.cyberforum.ru/cpp-beginners/thread456884.html
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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написать шаблон класса очередь, и сделать к типу char спецификацию (C++):

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

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

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

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

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

9
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 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
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 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 / 7
Регистрация: 06.10.2012
Сообщений: 44
19.08.2014, 12:56  [ТС] #5
ForEveR, ошибки пропали, но появилась следующие:
error LNK2019
error LNK1120
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
19.08.2014, 12:58 #6
На сколько я вижу, нет реализации функции Count()
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.08.2014, 13:04 #7
Рейвол, Нет реализации деструктора и функции Count для специализированного шаблона.
0
Рейвол
2 / 2 / 7
Регистрация: 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
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
19.08.2014, 13:17 #9
Цитата Сообщение от Рейвол Посмотреть сообщение
не удается сопоставить определение функции существующему объявлению
В объявлении у тебя int возвращает, а в реализации почему-то void.
1
Рейвол
2 / 2 / 7
Регистрация: 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;. При...

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

Как правильно сделать шаблон класса complex
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using std::cout; using std::cin;...

Как сделать шаблон функции другом шаблона класса?
С обычной функцией понятно: template&lt;class T&gt; class A { friend void...


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

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

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