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

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

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

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

19.08.2014, 12:25. Просмотров 678. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать шаблон класса очередь, и сделать к типу char спецификацию (C++):

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

Шаблон класса очередь - C++
Привет всем. При создании шаблона класса столкнулся со следующими проблемами: при использовании перегруженной &lt;&lt; пишет запрещенный внешний...

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

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

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

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

9
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.08.2014, 12:50 #3
Цитата Сообщение от Рейвол Посмотреть сообщение
сделать к типу char спецификацию
это специализация называется
C++
1
2
template<int maxsize>
Listop<char, maxsize>
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
19.08.2014, 12:58 #6
На сколько я вижу, нет реализации функции Count()
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 13:22
Привет! Вот еще темы с ответами:

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

Как сделать шаблон функции другом шаблона класса? - C++
С обычной функцией понятно: template&lt;class T&gt; class A { friend void f(); } А вот если функция f шаблонная, то указать ее...

Как сделать шаблон, с параметром-классом - потомком определённого класса? - C++
Хочется сделать шаблон с параметром-классом, который обязан реализовывать определённый интерфейс. class IService { public: ...

Написать шаблон класса полином и функции, высчитывающие производную и первообразную полинома - C++
Доброе утро. Нам задали такое задание:написать шаблон класса полином и функции,высчитывающие производную и первообразную полинома.Вроде...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
19.08.2014, 13:22
Ответ Создать тему
Опции темы

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