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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kreolix
5 / 5 / 0
Регистрация: 07.07.2011
Сообщений: 15
#1

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

07.11.2011, 09:46. Просмотров 762. Ответов 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

Пробовал делать конструктор от двух параметров, но тогда появляются другие проблемы.
Объясните плз, что и где поменять.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2011, 09:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблема с конструктором. (C++):

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

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

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

Работа с конструктором - C++
Доброго времени суток. Обращаюсь к вам с двумя проблемами. Во-первых, Code Blocks выдаёт у меня ошибку multiple definition. Связано ли...

Трабла с конструктором - C++
Компилятор никаких ошибок не выдает, но программа не запускается. using namespace std; class Cpmv { public: struct Info ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.11.2011, 09:54 #2
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
Bers
Заблокирован
07.11.2011, 10:05 #3
Цитата Сообщение от diagon Посмотреть сообщение
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
можно, если по уму. Но не как у автора - однозначно все через цензура
Kreolix
5 / 5 / 0
Регистрация: 07.07.2011
Сообщений: 15
07.11.2011, 10:08  [ТС] #4
Цитата Сообщение от diagon Посмотреть сообщение
Могу ошибаться, но в шаблонном классе нельзя отделять интерфейс от реализации.
Спасибо, помогло.
Ну и там еще было пару косяков.
Цитата Сообщение от Bers Посмотреть сообщение
можно, если по уму. Но не как у автора - однозначно все через жёпу
А как же сделать не через "цензура"?
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
5 / 5 / 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
07.11.2011, 10:25 #10
Kreolix, именно его (вместе с классом Node) необходимо скрыть.
Kreolix
5 / 5 / 0
Регистрация: 07.07.2011
Сообщений: 15
07.11.2011, 10:36  [ТС] #11
LosAngeles, silent_1991, Спасибо за разъяснения.
Bers
Заблокирован
07.11.2011, 18:22 #12
Цитата Сообщение от Kreolix Посмотреть сообщение
А можно поподробнее об этом?
конечно можно. Достаточно просто загуглить "описание композиция с++"
И следом: "описание шаблоны классов реализация шаблонных классов с++"

Ваш К.О.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
07.11.2011, 21:46 #13
Bers, так как же всё-таки можно разнести объявление и реализацию шаблонного класса по файлам?

Добавлено через 15 секунд
Ну, чтоб по уму, вы поняли.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2011, 21:46
Привет! Вот еще темы с ответами:

Ошибки с конструктором по умолчанию - C++
Пишу консольную игру, что-то вроде острова сокровищ, но не могу исправить пару ошибок с конструктором по умолчанию(error C2512) =( кто...

Непонятки с конструктором копирования - C++
class Table { Row* p; size_t size; public: Table(int i = 0) { p = new Row; size = i; }

Класс с Конструктором и Деструктором - C++
напишите класс, содержащий закрытые целочисленные переменные , характеризующие координаты точки в пространстве и ее температуру(с плавающей...

Ввод данных с конструктором - C++
Всем привет, новичок в с++ и возникла проблема. Вот рабочий код: #include &lt;iostream&gt; using namespace std; class Student { ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.11.2011, 21:46
Ответ Создать тему
Опции темы

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