Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
#1

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

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

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\Шаблон_класса_List.exe"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
В чем проблема?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2015, 18:08
Ответы с готовыми решениями:

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

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

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

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

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

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

Не по теме:

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

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

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

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

итого:
архив в топку, проект - пересоздать заново.
0
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 19:55  [ТС] #7
Понял, переделаю.
0
Вложения
Тип файла: rar Шаблон_класса_List.rar (1.37 Мб, 2 просмотров)
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 20:01  [ТС] #8
Переделал.Шаблон_класса_List.rar
0
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
01.11.2015, 20:08 #9
Цитата Сообщение от artart96 Посмотреть сообщение
Переделал.
Молодец, ёп-т. Дальше то что? Что переделал? Какие ошибки? В чём проблема?
0
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
01.11.2015, 20:20  [ТС] #10
Проблема всё таже: не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
0
hoggy
Заблокирован
Эксперт С++
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
artart96
-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
hoggy
Заблокирован
Эксперт С++
01.11.2015, 22:39 #13
Цитата Сообщение от artart96 Посмотреть сообщение
Спасибо, можно получить комментарий по данной строке?
макрос генерирует функцию-друга для вывода объекта в поток
1
01.11.2015, 22:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2015, 22:39

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

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

Обявление шаблонного класса
Как-то с пониманием С++ вроде уже все норм, осталась только одна тема немного...


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

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

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