Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/33: Рейтинг темы: голосов - 33, средняя оценка - 4.67
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
1

Шаблонный класс List

17.11.2011, 23:21. Просмотров 6096. Ответов 22
Метки нет (Все метки)

Имеется 2 шаблонных класса List и Node. Один объявлен другом другого. По идее должно работать, но у компилятора другое мнение на этот счет:
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall List<int>::PrintListForward(void)const " (?PrintListForward@?$List@H@@QBEXXZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall List<int>::AddBegining(int)" (?AddBegining@?$List@H@@QAEXH@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall List<int>::List<int>(void)" (??0?$List@H@@QAE@XZ) referenced in function _main
1>C:\Users\selver\documents\visual studio 2010\Projects\List_One\Debug\List_One.exe : fatal error LNK1120: 3 unresolved externals

Класс Node:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef NODE_H
#define NODE_H
 
template <class T>
class Node
{
public:
    Node(T,Node<T>*,Node<T>*);
    Node(T);
private:
    Node<T> * next;
    Node<T> * last;
    int key;
    T data;
};
 
#endif NODE_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "Node.h"
template <class T>
Node<T>::Node(T data,Node * next,Node * last)
{
    this->data=data;
    this->next=next;
    this->last=last;
}
 
template <class T>
Node<T>::Node(T data)
{
    this->data=data;
}
класс List:
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
#ifndef LIST_H
#define LIST_H
#include "Node.h"
 
template <class T>
class List
{
public:
    friend class Node<T>;
    List();
    void AddNodeEnd(T data);
    void AddBegining(T data);
    void deleteNodeEnd();
    void deleteNodeBegin();
    int find(int) const;
    void PrintListForward() const;
    void PrintListBack() const;
    void numNode() const;
private:
    Node<T> * head;
    Node<T> * temp;
};
 
#endif LIST_H
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
#include "List.h"
#include "Node.h"
#include<iostream>
 
template <class T>
List<T>::List():
head(NULL),
temp(NULL)
{}
 
template <class T>
void List<T>::AddNodeEnd(T data)
{
    Node<T> * nd=new Node<T>(data,NULL,temp);
    temp=nd;
    if (head)
    {
        Node<T>* current=head;
        while(current->next)
            current=current->next;
            current->last=nd;
    }
    else head=nd;
    numNode();
}
 
template <class T>
void List<T>::AddBegining(T data)
{
    Node<T> * nd=new Node<T>(data);
    if(head)
    {
        Node<T> * tmpt=head;
        head=nd;
        nd->next=tmpt;
    }
    else 
    {
        head=nd;
        nd->next=NULL;
    }
    numNode();
}
 
template <class T>
void List<T>::deleteNodeEnd()
{
    if (temp)
    {
        Node<T> * current=temp;
        current=current->last;
        delete current->next;
        current->next=NULL;
    }
    else
    std::cout<<"list is empty";
}
 
template <class T>
void List<T>::deleteNodeBegin()
{
    if (head)
    {
        Node<T> * tmpt;
        tmpt=head;
        tmpt=tmpt->next;
        delete head;
        head=tmpt;
    }
    else
    std::cout<<"list is empty";
}
 
template <class T>
int List<T>::find(int k) const
{
    Node<T>* current;
    current=head;
    while(current)
    {
        if (current->key==k)
            return current->data;
        current=current->next;
    }
}
 
template <class T>
void List<T>::PrintListForward() const
{
    Node<T> * current=head;
    while(current)
    {
        std::cout<<current->data<<" ";
        current=current->next;
    }
}
 
template <class T>
void List<T>::PrintListBack() const
{
    Node<T> * current=temp;
    while(current)
    {
        std::cout<<current->key<<" "<<current->data;
        current->last;
    }
}
 
template <class T>
void List<T>::numNode() const
{
    Node<T> * counter=head;
    int i=0;
    while (counter)
    {
        counter->key=++i;
        counter=counter->next;
    }
}
main:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include"Node.h"
#include "List.h"
using namespace std;
 
int main()
{
    List<int> n;
    n.AddBegining(12);
    n.AddBegining(45);
    n.AddBegining(10);
    n.AddBegining(70);
    n.AddBegining(0);
    n.AddBegining(55);
    n.PrintListForward();
    return 0;
}
Без шаблонов все работало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2011, 23:21
Ответы с готовыми решениями:

Шаблонный класс list
Доброго времени суток, пишу шаблонный list, но вот на определённом этапе...

Шаблонный класс list, собственная реализация
Привет всем. Я по чуть-чуть пишу шаблонный класс list с добавлением элементов в...

Создать динамический шаблонный класс односвязный список - List
помогите пожалуйста с задание в универ задали и я вот сижу парюсь! буду очень...

Написать шаблонный класс List для работы с одноправленными списками в динамической памяти
Для объектов класса List определить операции проверки списка на пустоту,...

Класс Matrix: реализовать шаблонный класс для двумерных массивов
Доброго времени суток. У меня вопрос: я создал класс Array со внутренним...

22
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
25.11.2011, 14:37 21
Bers, фу гадость какая.
0
Riderik
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
25.11.2011, 20:47 22
Народ, если вы знаете способы по-лучше, делитесь. Критиковать-то каждый может
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
25.11.2011, 20:51 23
Цитата Сообщение от Riderik Посмотреть сообщение
если вы знаете способы по-лучше, делитесь. Критиковать-то каждый может
Это же очевидно, писать реализацию шаблонов в *.h файлах.
0
25.11.2011, 20:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2011, 20:51

Шаблонный класс и класс одномерный массив
Задание: протестировать класс шаблон, с обычными типами данных я понял как...

Переделать класс в шаблонный класс
Как данный процесс проделать? Я попробовал так по синтаксису из учебника:...

Шаблонный класс
#include &lt;iostream&gt; using namespace std; template &lt;class T&gt; class Vector{...


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

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

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