Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305

Шаблон

15.11.2010, 11:41. Показов 1229. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброе время суток))
Вот нпаисал прогу:
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
#include <string.h>
#include <iostream>
using namespace std;
 
template<class T>
class List{
private:
        struct Element{
                T key;
                Element *next;
        };
        Element* pbeg;
        Element* pend;
public:
        List(){
                pbeg = 0;
                pend = 0;
        }
        T& operator <<(int a);
        T& operator >>(int& a);
        void print();
        ~List(){
            while(pbeg){
                Element* temp = pbeg;
                pbeg = pbeg->next;
                delete temp;
                temp = 0; 
            }
        }
};
 
template<class T>T& List<T>::operator << (int a){
    Element* ph = new Element;
    ph->key = a;
    ph->next = 0;
    if (pend!=0){
        pend->next = ph;
        pend = ph;
    }
    else{
        pbeg = ph;
        pend = ph;
    }
    return *this;
}
template<class T>T& List<T>::operator>>(int &a){
    if(pbeg){
        a = pbeg->key;
        Element* ph = pbeg;
        pbeg = pbeg->next;
        delete ph;
        return *this;
    }
    else{
        throw "Нет элементов!\n";
    }
}
template<class T>void List<T>::print(){
    Element* temp = pbeg;
    while(temp){
        cout << " " << temp->key;
        temp = temp->next;
    }
    cout << endl;
}
int main(){
    setlocale(LC_ALL,"Russian");
    List<int> w; int b=0;int a;
    while(true){
        cout<<"1) Заполнить очередь"<<endl;
        cout<<"2) Вывести на экран"<<endl;
        cout<<"3) Удалить элемент"<<endl;
        cout<<"0) Выход"<<endl;
        cout<<"Ввод: "; cin>>b;
        if (b == 1){
            system("cls");
            cout<<"Введите значение: ";
            cin>>a;
            w<<a;
        }
        if (b == 2){
            system("cls");
            cout<<"Список: ";
            w.print();
            cout<<endl;
        }
        if (b == 3){
            try{
                system("cls");
                w>>a;
            }
            catch(char error){
                cout<<error<<endl;
            }
        }
        if (b == 0)break;
    }
}
Но не могу сделать так что бы переменная "а" принимала тот же тип, что и шаблон. И еще выдает ошибку когда пытаюсь сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class T>T& List<T>::operator << (int a){
    Element* ph = new Element;
    ph->key = a;
    ph->next = 0;
    if (pend!=0){
        pend->next = ph;
        pend = ph;
    }
    else{
        pbeg = ph;
        pend = ph;
    }
    return *this;//error C2440: return: невозможно преобразовать "List<T>" в "int &"
}
Ну и во сторой функции тоже самое. Помогите плиз)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2010, 11:41
Ответы с готовыми решениями:

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

Передать шаблон std::array в другой шаблон
Шаблон std::vector передать получается: template &lt;class T, template&lt;class U, class = allocator&lt;U&gt; &gt;class Seq &gt; class A{ ...

Шаблон стека изменить на шаблон очереди
Кто может пояснить как работает этот шаблон стека, так как мне нужно изменить его на очередь,а я не совсем понимаю его template &lt;class...

15
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.11.2010, 12:02
Цитата Сообщение от robert19 Посмотреть сообщение
C++
1
//error C2440: return: невозможно преобразовать "List<T>" в "int &"
Более, чем странно, так как this имеет тип указателя на T, а по твоей декларации ожидается ссылка на Т.
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 12:07  [ТС]
как исправить? Вот не знаю как переменную "а" сделать типом "Т". Тогда думаю было бы все тип-топ
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.11.2010, 12:11
Цитата Сообщение от robert19 Посмотреть сообщение
Но не могу сделать так что бы переменная "а" принимала тот же тип, что и шаблон.
Что это значит?
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 12:30  [ТС]
Ну что бы мне добавить элемент в очередь или же от туда удалить я завожу переменную "а", но она типа int а мне нужно что бы она автоматом принимала тот тип которым будет объект.
например я завел:
C++
1
 List<int> w; int a;
Теперь Т = int
А если
C++
1
 List<char> w;int a;
Т = char
И вот как сделать что бы 'а' тоже автоматом была равная 'Т'

Добавлено через 27 секунд
может я просто не очень понятно объясняю. незнаю даже как сказать то подробнее
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.11.2010, 12:35
Сам уже глючу, this указывает не на T, а на List. А ожидается ссылка на T. Но звёздочкой ты преобразуешь указатель в ссылку, не меняя типа. Поменяй декларацию на
C++
1
List<T> & operator << (<T> a);
.

Добавлено через 1 минуту
Цитата Сообщение от robert19 Посмотреть сообщение
Т = char
И вот как сделать что бы 'а' тоже автоматом была равная 'Т'
Комп не способен догадаться о какой либо связи между w и a. Поэтому если хочешь, чтоб a имела базовый тип, то пиши явно:
C++
1
List<char>w; char a;
.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
15.11.2010, 12:56
Цитата Сообщение от robert19 Посмотреть сообщение
Т = char
И вот как сделать что бы 'а' тоже автоматом была равная 'Т'
Можно сделать отдельную ф-цию, которая будет создавать 2 указателя (один на List<T>, второй на тип Т), динамически выделять "под них" память и возвращать эти указатели. Таким образом можно добится того, "что бы 'а' тоже автоматом была равная 'Т'"
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.11.2010, 13:14
Бред. Функции работают в runtime, а типы переменных задаются в deisgnedtime. Кроме того, ни одна функция, кроме возвращающих runtime информацию о типе (в том числе, о расходе на него памяти (suizeof)), не примет тип в качестве параметра.

Добавлено через 4 минуты
Вы когда массивы объявляете и вам нужны переменные базовых типов этих массивов (например, буфер для обмена двух элементов местами имеет базовый тип массива, то есть тип элемента) тоже пытаетесь сделать автомат, обеспечивающий совпадение типов? Уж если надо перетипизировать конейнерные типы, а перетипизировать одновременно буфера базовых типов лень, то под каждый вариант базового типа создавайте или макрос, или синонимичный тип.

Добавлено через 1 минуту
C++
1
2
3
#define TIten int
List <TItem>w;
TItem a;
. Здесь хоть как меняй int на char, потом на double, тип a будет оставаться совпадающим с базовым типом w.
1
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
15.11.2010, 13:16
Опиши подробнее, как ты хочешь, чтобы работали операторы "<<" и ">>". Не совсем понятно, чего ты добиваешься.
0
15.11.2010, 13:31

Не по теме:

Бред. Функции работают в runtime, а типы переменных задаются в deisgnedtime. Кроме того, ни одна функция, кроме возвращающих runtime информацию о типе (в том числе, о расходе на него памяти (suizeof)), не примет тип в качестве параметра.
Да, согласен. Что-то я перекодил %-)

P.S. Вчера поздно вечером минут 30 не мог понять почему sizeof не правильно возвращает длину строки О_о

0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 13:48  [ТС]
Цитата Сообщение от volovzi Посмотреть сообщение
Опиши подробнее, как ты хочешь, чтобы работали операторы "<<" и ">>". Не совсем понятно, чего ты добиваешься.
хочу добиться того, что бы:
я содал объект List<int> w; int a;
Теперь с помощью перегруженной операции '<<' мне нужно добавить элемент в очередь. Я ввожу 3 и он его добавляет и т.д.
Но если я создам объект List<char> w; то и переменную 'a' мне тоже придется менять тип на char. дак вот что бы так каждый раз не менять, я и хотел бы как нить сделать, что бы переменная принимала тот тип как у объекта 'w'.
т.е. если
C++
1
2
List<double> w; то и double a;
List<float> w; то и float a;
Добавлено через 14 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
Сам уже глючу, this указывает не на T, а на List. А ожидается ссылка на T. Но звёздочкой ты преобразуешь указатель в ссылку, не меняя типа. Поменяй декларацию на
C++
1
List<T> & operator << (<T> a);
.
Что то все равно ошибки(((
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
15.11.2010, 13:54
robert19, а что эти операторы возвращают? Ссылку на новый список?
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 13:55  [ТС]
Цитата Сообщение от volovzi Посмотреть сообщение
robert19, а что эти операторы возвращают? Ссылку на новый список?
Почему на новый то
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
15.11.2010, 13:58
Что эти операторы возвращают?

Добавлено через 27 секунд
Поправка: что должны возвращать?
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 14:01  [ТС]
Цитата Сообщение от volovzi Посмотреть сообщение
Что эти операторы возвращают?

Добавлено через 27 секунд
Поправка: что должны возвращать?
возвращает ссылку на объект
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
15.11.2010, 14:06
На какой объект?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2010, 14:06
Помогаю со студенческими работами здесь

"LinkedList": для использования класс шаблон требуется список аргументов шаблон
Что то не могу въехать в чем промах? LinkedList.h #pragma once #include &lt;iostream&gt; #include &lt;string&gt; template&lt;typename...

Ошибка при компиляции:"C2955 "Tree": для использования класс шаблон требуется список аргументов шаблон"
Есть класс бинарного дерева, в нем структура. Класс - Tree, структура - list(листик, а не список). При компиляции выдает...

Шаблон родительского класса и шаблон класса потомка
Запутался, как правильно пронаследоваться от шаблона класса? #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; ...

Шаблон
Создать класс-шаблон, содержащий поля для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и...

Шаблон
Доброго времени суток. Есть две функции: void mouseMove( int x, int y, int speed = 1, int xMaxOffset = 0, int yMaxOffset = 0 ); void...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru