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

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

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

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

19.08.2014, 12:25. Просмотров 668. Ответов 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;
}
вот это последний вариант и он выдает постоянные ошибки, которые я не в состоянии решить. кто может помочь, буду очень благодарен
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2014, 12:25     Написать шаблон класса очередь, и сделать к типу char спецификацию
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
19.08.2014, 12:49     Написать шаблон класса очередь, и сделать к типу char спецификацию #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;
   //
};
Но объявление функций все равно придется переделать, а именно шаблоны для них.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.08.2014, 12:50     Написать шаблон класса очередь, и сделать к типу char спецификацию #3
Цитата Сообщение от Рейвол Посмотреть сообщение
сделать к типу char спецификацию
это специализация называется
C++
1
2
template<int maxsize>
Listop<char, maxsize>
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
19.08.2014, 12:51     Написать шаблон класса очередь, и сделать к типу char спецификацию #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) { ... }
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
19.08.2014, 12:56  [ТС]     Написать шаблон класса очередь, и сделать к типу char спецификацию #5
ForEveR, ошибки пропали, но появилась следующие:
error LNK2019
error LNK1120
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
19.08.2014, 12:58     Написать шаблон класса очередь, и сделать к типу char спецификацию #6
На сколько я вижу, нет реализации функции Count()
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
19.08.2014, 13:04     Написать шаблон класса очередь, и сделать к типу char спецификацию #7
Рейвол, Нет реализации деструктора и функции Count для специализированного шаблона.
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
19.08.2014, 13:09  [ТС]     Написать шаблон класса очередь, и сделать к типу char спецификацию #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?
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
19.08.2014, 13:17     Написать шаблон класса очередь, и сделать к типу char спецификацию #9
Цитата Сообщение от Рейвол Посмотреть сообщение
не удается сопоставить определение функции существующему объявлению
В объявлении у тебя int возвращает, а в реализации почему-то void.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 13:22     Написать шаблон класса очередь, и сделать к типу char спецификацию
Еще ссылки по теме:

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

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

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

Вопросы по типу char - C++
Читаю книгу Страуструпа. Дошёл до типа char. В книге приводится такой пример: #include &lt;iostream&gt; int main(){ char c; ...


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

Или воспользуйтесь поиском по форуму:
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
19.08.2014, 13:22  [ТС]     Написать шаблон класса очередь, и сделать к типу char спецификацию #10
John Prick, ой точно, мой косяк, не заметил

Добавлено через 3 минуты
все, теперь все работает, всем спасибо, тема закрыта
Yandex
Объявления
19.08.2014, 13:22     Написать шаблон класса очередь, и сделать к типу char спецификацию
Ответ Создать тему
Опции темы

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