5 / 5 / 0
Регистрация: 07.07.2011
Сообщений: 15
1

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

07.11.2011, 09:46. Показов 978. Ответов 12
Метки нет (Все метки)

Пытаюсь сделать класс список и не получается написать конструктор копирования.
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

Пробовал делать конструктор от двух параметров, но тогда появляются другие проблемы.
Объясните плз, что и где поменять.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2011, 09:46
Ответы с готовыми решениями:

VS 2008 Проблема с конструктором копий
Недавно получил от MS VS2008 и компилятор ругается на конструктор копий, может что исправили в этой...

Проблема с перегрузкой операторов '-' >> << и с конструктором без параметров
Помогите пожалуйста, проблема с перегрузкой операторов '-' &gt;&gt; &lt;&lt;, возможно еще с конструктором без...

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

В чем разница между конструктором по умолчанию и конструктором с параметрами?
Объясните пожалуйста в чем разница между конструктором по умолчанию и конструктором с параметрами,...

12
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.11.2011, 09:54 2
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
1
Заблокирован
07.11.2011, 10:05 3
Цитата Сообщение от diagon Посмотреть сообщение
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
можно, если по уму. Но не как у автора - однозначно все через цензура
0
5 / 5 / 0
Регистрация: 07.07.2011
Сообщений: 15
07.11.2011, 10:08  [ТС] 4
Цитата Сообщение от diagon Посмотреть сообщение
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
Спасибо, помогло.
Ну и там еще было пару косяков.
Цитата Сообщение от Bers Посмотреть сообщение
можно, если по уму. Но не как у автора - однозначно все через жёпу
А как же сделать не через "цензура"?
0
Эксперт С++
5053 / 3114 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
07.11.2011, 10:11 5
Цитата Сообщение от Bers Посмотреть сообщение
если по уму
Это, простите, как?
0
Заблокирован
07.11.2011, 10:11 6
композиция жеж!
И моральное негласное соглашение, как реализуюццо методы шаблонного класса
0
Заблокирован
07.11.2011, 10:12 7
http://ru.wikipedia.org/wiki/%... 8%D0%B5%29
0
5 / 5 / 0
Регистрация: 07.07.2011
Сообщений: 15
07.11.2011, 10:20  [ТС] 8
Цитата Сообщение от Bers Посмотреть сообщение
композиция жеж!
И моральное негласное соглашение, как реализуюццо методы шаблонного класса
А можно поподробнее об этом?

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

Ваш К.О.
0
Эксперт С++
5053 / 3114 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
07.11.2011, 21:46 13
Bers, так как же всё-таки можно разнести объявление и реализацию шаблонного класса по файлам?

Добавлено через 15 секунд
Ну, чтоб по уму, вы поняли.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2011, 21:46
Помогаю со студенческими работами здесь

Что-то с конструктором
Задача: написать программу бюджета, есть два типа счета, у каждого свои параметры пополнения и...

Непонятки с конструктором
Вопрос такой, допустим я создал класс и в конструкторе ,в параметрах прописал два переменных , и...

Трабла с конструктором
Компилятор никаких ошибок не выдает, но программа не запускается. using namespace std; class...

непонятка с конструктором
private String name; //Ф.И.О private double sumAccount; // сумма на карте private long...

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

Ошибка с конструктором
Помогите исправить ошибку в классе Save package project1; public class Project1 { ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru