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

Проблема с конструктором. - C++

Восстановить пароль Регистрация
 
Kreolix
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 15
07.11.2011, 09:46     Проблема с конструктором. #1
Пытаюсь сделать класс список и не получается написать конструктор копирования.
header
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
//
#include <iostream>;
using namespace std;
 
template <class T> class LIST
{
public:
    class Node
    {
    public:
        T data;
        Node * next;
        Node (T d=0)
        {
               data=d;
               next=0;
        }
    };
    Node * head;
public:
    LIST (){head=0;}
    ~LIST ();
    void insert_beg (T);
    void insert_end (T);
    void del (T);
    T& find(T);
    void display();
    LIST (const LIST<T> list1);
};
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
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
# include "LIST.h"
 
 
 
template <class T> 
LIST <T>::LIST(const LIST<T> list1)
{
    Node *t1,*t2;
    t1=this->head;
    t2=list1.head;
    if(t2!=NULL)
    {
        t1=new Node;
        t1->data=t2->data;
        t2 = t2->next;
    }
    this->head = t1;    
    while (t2 != NULL)
    {
        this->insert_end(t2->data);
        t2 = t2->next;
    }
    t2 = list1.head;
}
 
 
 
template <class T> 
void  LIST <T>::insert_beg (T dat)
{
    Node * nel=new Node(dat);
    nel->next=head;
    head=nel;
}
 
template <class T>
LIST <T>::~LIST ()
{
    Node *p = head, *a;
    while (p != 0)
    {   a = p;
        p = p->next;
        delete a;
    }
    head = 0;
}
 
template <class T>
void LIST<T>::insert_end (T dat)
{
    Node *temp=new Node(dat);
    Node *p = head;
    Node *a = 0;
    while (p !=0)
    {
        a = p;
        p = p->next;
    }
    a->next = temp;
    temp->next = 0;
}
 
template <class T>
void LIST<T>::display()
{
    Node *p = head;
    while (p != 0)
    {
        cout<<p->data;
        p = p->next;
    }
    cout<<endl;
}
 
template <class T>
T& LIST<T>::find(T dat)
{
    Node *p = head, *a = 0;
    while (p != 0)
    {
        if ((p->data) == dat)
        {
            a = p;
            break;
        }
        p = p->next;
    }
    if (a == 0)
    {
        cout<<dat;
        cout<<"not found"<<endl;
//      void &r = NULL;
//      return 0;
    }
    else
    {
        int &r_a = (a->data);
        return r_a;
    }
}
 
 
template <class T>
void LIST<T>::del (T dat)
{
    Node *p = head, *a = 0;
    while (p != 0)
    {
        a = p;
        p = p->next;
        if ((p->data) == dat)
        {
            break;
        }
    }
    a->next = a->next->next;
 
}   
    
 
 
 
int main()
{
    LIST<int> qq;
    qq.insert_beg(7);
    qq.insert_beg(3);
    qq.insert_beg(8);
    qq.insert_end(4);
    qq.insert_end(5);
    LIST<int> ww (qq);
    ww.display();
    qq.display();
    qq.find(3) = 9;
    qq.display();
    qq.del(7);
    qq.display();
        
    
}
Выводит такую ошибку: error C2652: 'LIST<T>' : illegal copy constructor: first parameter must not be a 'LIST<T>'
1> c:\users\я\documents\visual studio 2008\projects\list\list\list.h(29) : see reference to class template instantiation 'LIST<T>' being compiled

Пробовал делать конструктор от двух параметров, но тогда появляются другие проблемы.
Объясните плз, что и где поменять.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.11.2011, 09:54     Проблема с конструктором. #2
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
Bers
Заблокирован
07.11.2011, 10:05     Проблема с конструктором. #3
Цитата Сообщение от diagon Посмотреть сообщение
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
можно, если по уму. Но не как у автора - однозначно все через цензура
Kreolix
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 15
07.11.2011, 10:08  [ТС]     Проблема с конструктором. #4
Цитата Сообщение от diagon Посмотреть сообщение
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
Спасибо, помогло.
Ну и там еще было пару косяков.
Цитата Сообщение от Bers Посмотреть сообщение
можно, если по уму. Но не как у автора - однозначно все через жёпу
А как же сделать не через "цензура"?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.11.2011, 10:11     Проблема с конструктором. #5
Цитата Сообщение от Bers Посмотреть сообщение
если по уму
Это, простите, как?
Bers
Заблокирован
07.11.2011, 10:11     Проблема с конструктором. #6
композиция жеж!
И моральное негласное соглашение, как реализуюццо методы шаблонного класса
LosAngeles
Заблокирован
07.11.2011, 10:12     Проблема с конструктором. #7
http://ru.wikipedia.org/wiki/%D0%98%...D0%B8%D0%B5%29
Kreolix
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 15
07.11.2011, 10:20  [ТС]     Проблема с конструктором. #8
Цитата Сообщение от Bers Посмотреть сообщение
композиция жеж!
И моральное негласное соглашение, как реализуюццо методы шаблонного класса
А можно поподробнее об этом?

Цитата Сообщение от LosAngeles Посмотреть сообщение
Разве тут можно что-либо скрыть, кроме
C++
1
Node * head;
?
LosAngeles
Заблокирован
07.11.2011, 10:24     Проблема с конструктором. #9
у тебя не один метод не возращает нод, и я не вижу смысла его использовать в пользовательском коде, если невтерпёж будет, можно итератор присобачить http://insidecpp.ru/patterns/iterator/ поэтому первый публик я бы заменил на приват
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.11.2011, 10:25     Проблема с конструктором. #10
Kreolix, именно его (вместе с классом Node) необходимо скрыть.
Kreolix
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 15
07.11.2011, 10:36  [ТС]     Проблема с конструктором. #11
LosAngeles, silent_1991, Спасибо за разъяснения.
Bers
Заблокирован
07.11.2011, 18:22     Проблема с конструктором. #12
Цитата Сообщение от Kreolix Посмотреть сообщение
А можно поподробнее об этом?
конечно можно. Достаточно просто загуглить "описание композиция с++"
И следом: "описание шаблоны классов реализация шаблонных классов с++"

Ваш К.О.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2011, 21:46     Проблема с конструктором.
Еще ссылки по теме:

Что-то с конструктором C++
C++ Трабла с конструктором
Ошибки с конструктором по умолчанию C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.11.2011, 21:46     Проблема с конструктором. #13
Bers, так как же всё-таки можно разнести объявление и реализацию шаблонного класса по файлам?

Добавлено через 15 секунд
Ну, чтоб по уму, вы поняли.
Yandex
Объявления
07.11.2011, 21:46     Проблема с конструктором.
Ответ Создать тему
Опции темы

Текущее время: 00:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru