Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
1

Реализация шаблонного класса

01.11.2015, 18:08. Показов 1649. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
List_Node.h:

#ifndef _List_Node_H
#define _List_Node_H

template <class Type>
class ListNode
{
public:
Type conteyner;
ListNode *Next;
};

#endif _LISTNODE_H

List.h:

#ifndef _List_H
#define _List_H
#include "List_Node.h"

template <class Type>
class Spisok
{
ListNode<Type> *Head;
ListNode<Type> *End;
ListNode<Type>* GetNewPtr(const Type &);
public:
Spisok();
~Spisok();
void WriteFromFront(Type);
Type ReadFromPosition(int);
bool DeleteFromPosition(int);
int IsEmpty() const;
void WriteFromEnd(const Type);
void print() const;
};

template<class Type>
Spisok <Type>::Spisok()
{
Head=nullptr;
End=nullptr;

}

template<class Type>
ListNode<Type>* Spisok<Type>:: GetNewPtr(const Type &data)
{

ListNode<Type> *Ptr=new ListNode<Type>;
Ptr->conteyner=data;
Ptr->Next=NULL;
return Ptr;
}

template<class Type>
void Spisok<Type>::WriteFromFront(Type data)
{
ListNode<Type> *NewPtr=GetNewPtr(data);
if(!IsEmpty())
{
Head=End=NewPtr;
}
else
{
NewPtr->Next=Head;
Head=NewPtr;
}
}

template<class Type>
Spisok<Type>::~Spisok()
{
ListNode<Type> *curptr=Head,*tempPtr=NULL;
if(IsEmpty())
{
while(curptr!=NULL)
{
tempPtr=curptr;
curptr=curptr->Next;
delete tempPtr;
}
}
}

template<class Type>
void Spisok<Type>:: WriteFromEnd(const Type data)
{
ListNode<Type> *NewPtr=GetNewPtr(data);
if(!IsEmpty()) Head=End=NewPtr;
else
{
End->Next=NewPtr;
End=NewPtr;
}
}

template<class Type>
bool Spisok<Type>:: DeleteFromPosition(int pos)
{
int temp=0,temp1=0;
ListNode<Type> *NewPtr=Head;
ListNode<Type> *TempPtr=Head;
ListNode<Type> *TempPtr1=Head;
ListNode<Type> *TempPtr2=Head;
if(!IsEmpty()) return false;
else
{
while(NewPtr->Next) {temp++;NewPtr=NewPtr->Next;}
if(temp<pos || pos<0) {cout<<"Удаление невозможно"<<endl;return false;}
while(temp1!=pos) {TempPtr=TempPtr->Next;temp1++;}
if(pos==0) {Head=TempPtr->Next;delete TempPtr;TempPtr=Head;return true;}
if(TempPtr==End)
{
while(TempPtr1->Next!=End) TempPtr1=TempPtr1->Next;
delete End;
End=TempPtr1;
End->Next=NULL;
return true;
}
while(TempPtr2->Next!=TempPtr) TempPtr2=TempPtr2->Next;
TempPtr2->Next=TempPtr->Next;
delete TempPtr;
return true;

}
}

template<class Type>
Type Spisok<Type>:: ReadFromPosition(int pos)
{
int temp=0,temp1=0;
ListNode<Type> *NewPtr=Head;
ListNode<Type> *TempPtr=Head;
if(!IsEmpty()) return NULL;
while(NewPtr) {temp++;NewPtr=NewPtr->Next;}
if(pos>temp || pos<0) return NULL;
if(pos==0) return Head->conteyner;
pos--;
while(pos)
{
pos--;
TempPtr=TempPtr->Next;
}
return TempPtr->conteyner;
}

template<class Type>
int Spisok<Type>::IsEmpty() const
{
if(Head==NULL)
return 0;
else return 1;
}

template<class Type>
void Spisok<Type>:: print() const
{
ListNode<Type> *TempPtr=Head;
while(TempPtr)
{
cout<<TempPtr->conteyner
<<endl;
TempPtr=TempPtr->Next;
}
}

#endif _List_H

main.cpp:
#include<iostream>
#include "List.h"
#include "List_Node.h"
using namespace std;

class Car{
int c;
public:
Car(){c = 0;}
};

class Man{
char b;
public:
Man() {b = 'm';}
};

int main()
{
Spisok<Car> N1;
Spisok<Man> N2;
N1.print();
N2.print();
return 0;
}

Проблема: при запуске выводится:
""C:\Users\Artem\Desktop\ООП\Тестировка\Шаблон_класса_List\Debug\Шаблон_класса_L ist.exe"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
В чем проблема?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2015, 18:08
Ответы с готовыми решениями:

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

Вызов метода у шаблонного поля, шаблонного класса
Пытаюсь разобраться с шаблонами- задача создать шаблонный класс, у которого есть шаблонное поле. и...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон...

12
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.11.2015, 19:04 2

Не по теме:

Цитата Сообщение от artart96 Посмотреть сообщение
В чем проблема?
124 сообщения на форуме написал, а тегами пользоваться так и не научился.

Цитата Сообщение от artart96 Посмотреть сообщение
не является внутренней или внешней командой
1. Попробуй сделать полную пересборку проекта.
2. Попробуй убрать русские названия из проекта и пути к нему.
3. Если первые 2 пункта не помогут - залей проект архивом на форум.
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 19:12  [ТС] 3
ConsoleApplication2.rar
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 19:12  [ТС] 4
Цитата Сообщение от Tulosba Посмотреть сообщение
1. Попробуй сделать полную пересборку проекта.
2. Попробуй убрать русские названия из проекта и пути к нему
Все равно одно и то же выдает.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.11.2015, 19:20 5
artart96, в твоем архиве нет файлов *.cpp/*.h
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.11.2015, 19:32 6
Цитата Сообщение от artart96 Посмотреть сообщение
ConsoleApplication2.rar

c1xx : fatal error C1083: Cannot open source file: '..\..\..\..\Desktop\ООП\Тестировка\Шаблон_класса_List\Шаблон_класса_List\main.c pp': No such file or directory
1.
(не критично)
русские буквы в путях - признак идиота.

2.
(критично)
в архиве отсутствуют исходники.

итого:
архив в топку, проект - пересоздать заново.
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 19:55  [ТС] 7
Понял, переделаю.
Вложения
Тип файла: rar Шаблон_класса_List.rar (1.37 Мб, 3 просмотров)
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 20:01  [ТС] 8
Переделал.Шаблон_класса_List.rar
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.11.2015, 20:08 9
Цитата Сообщение от artart96 Посмотреть сообщение
Переделал.
Молодец, ёп-т. Дальше то что? Что переделал? Какие ошибки? В чём проблема?
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 20:20  [ТС] 10
Проблема всё таже: не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.11.2015, 20:52 11
Лучший ответ Сообщение было отмечено artart96 как решение

Решение

Цитата Сообщение от artart96 Посмотреть сообщение
Шаблон_класса_List.rar
ну то есть,
по поводу русских буковок в файловых путях - эту информацию вы так и не восприняли?

ошибка 1:
downloads\шаблон_класса_list\шаблон_класса_list\list.h(147): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Car' (or there is no acceptable conversion)
статус: исправлено.

ошибка 2.
downloads\шаблон_класса_list\шаблон_класса_list\list.h(147): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Man' (or there is no acceptable conversion)
статус: исправлено.

Итого:


1>------ Build started: Project: Шаблон_класса_List, Configuration: Debug Win32 ------
1> main.cpp
1> Шаблон_класса_List.vcxproj -> C:\Users\Nataniel Bampo\Downloads\Шаблон_класса_List\Debug\Шаблон_класса_List.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Лекарство:

файл main.cpp
заменить на:

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
#include<iostream>
#include "List.h"
#include "List_Node.h"
using namespace std;
 
#ifndef OUT_TO_STREAM
    #define OUT_TO_STREAM(type_)  \
        template<class T>friend   \
        ::std::basic_ostream<T>&  \
        operator<<(::std::basic_ostream<T>& os, const type_& obj)
#endif
 
 
 
class Car{
 
    OUT_TO_STREAM(Car)
    {
        return os << "Car: " << obj.c;
    }
 
    int c;
public:
    Car(){c = 0;}
};
 
class Man{
 
    OUT_TO_STREAM(Man)
    {
        return os << "Man: " << obj.b;
    }
 
    char b;
public:
    Man() {b = 'm';}
};
 
int main()
{
    Spisok<Car> N1;
    Spisok<Man> N2;
    N1.print();
    N2.print();
}
1
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 21:02  [ТС] 12
Цитата Сообщение от hoggy Посмотреть сообщение
#ifndef OUT_TO_STREAM
* * #define OUT_TO_STREAM(type_) *\
* * * * template<class T>friend * \
* * * * ::std::basic_ostream<T>& *\
* * * * operator<<(::std::basic_ostream<T>& os, const type_& obj)
#endif
Спасибо, можно получить комментарий по данной строке?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.11.2015, 22:39 13
Цитата Сообщение от artart96 Посмотреть сообщение
Спасибо, можно получить комментарий по данной строке?
макрос генерирует функцию-друга для вывода объекта в поток
1
01.11.2015, 22:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2015, 22:39
Помогаю со студенческими работами здесь

Чем отличается шаблонный метод класса от шаблонного класса?
Чем отличается шаблонный метод класса от шаблонного класса???????ПЛИЗ!!!!Если можно немного ссылок...

Реализация шаблонного метода с переменным числом параметров
Добрый день! Не могу придумать, как реализовать метод, позволяющий принимать переменное кол-во...

Создание Шаблонного класса
Здравствуйте! Столкнулся с проблемой создания шаблона для класса. Не могу понять как ввести более...

Инстанцирование шаблонного класса
Уважаемые форумчане! Помогите в не сложном, как я полагаю, для Вас вопросе. Имеется шаблонный ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru