0 / 0 / 2
Регистрация: 05.10.2015
Сообщений: 19
1

Исправить ошибку в конструкторе копирования пользовательского класса Sort

16.03.2016, 20:13. Показов 495. Ответов 1
Метки нет (Все метки)

Здравствуйте. Такая вот проблема. Обычный конструктор работает без ошибок и подчеркиваний:
C++
1
2
3
4
5
6
7
Sort::Sort()
{
    cout << "len = ";
    cin >> len;
    cout << "\nConstruct: " << endl;
    px = new int[len];
}
а конструктор-копировальщик с ошибками:
1)error C2662: int Sort::get_len(void): невозможно преобразовать указатель "this" из "const Sort" в "Sort &"
2)error C2662: int *Sort::get_px(void): невозможно преобразовать указатель "this" из "const Sort" в "Sort &"
3)IntelliSense: объект содержит квалификаторы типа, несовместимые с функцией-членом тип объекта: const Sort
C++
1
2
3
4
5
6
7
8
9
10
11
Sort::Sort(const Sort&X)
{
    cout << "\nKopirovalshick:\n";
    len = X.get_len();
    px = new int[len];
    int *py = X.get_px();
    for (int i = 0; i < len; i++)
    {
        px[i] = py[i];
    }
}
сам код (он не законченный; только начал):
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
#include <iostream>
#include <Windows.h>
using namespace std;
class Sort
{
public:
    int *px;
    int len;
public:
    Sort();//constructor
    void Input();
    Sort(const Sort&X);
    int *get_px(){ return px; }
    int get_len(){ return len; }
    void set_len(int l);
    void set_px(int*p);
    void Insertion(int &C, int &M);
    void Selection(int &C, int &M);
    void Buble(int &C, int &M);
    void Quick_sort(int &C, int &M);
    void Output();
};
Sort::Sort()
{
    cout << "len = ";
    cin >> len;
    cout << "\nConstruct: " << endl;
    px = new int[len];
}
void Sort::Input()
{
    for (int i = 0; i < len; i++)
    {
        cout << "Input " << i + 1 << " element: ";
        cin >> px[i];
    }
}
void Sort::Output()
{
    for (int i = 0; i < len; i++)
    {
        cout << px[i] << " ";
    }
}
Sort::Sort(const Sort&X)
{
    cout << "\nKopirovalshick:\n";
    len = X.get_len();
    px = new int[len];
    int *py = X.get_px();
    for (int i = 0; i < len; i++)
    {
        px[i] = py[i];
    }
}
void main()
{
    Sort X;
    X.Input();
    X.Output();
    system("pause");
}
подскажите, в чем проблема. Спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2016, 20:13
Ответы с готовыми решениями:

Ошибка в конструкторе копирования класса
Хотя и делал по образцу, но почему то лезет ошибка записи за пределы динамического массива, хотя и...

В конструкторе копирования отцовского (_str) класса возникает некое "необработанное исключение"
Добрый день. Делаю курсовик в универе, иерархия классов и работа с ними. В конструкторе...

Конструктор копирования. Посоветуйте как исправить ошибку
Пишет &quot;Нет подходящего конструктора копирования по умолчанию&quot;, задание было добавить конструктор...

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

1
0 / 0 / 2
Регистрация: 05.10.2015
Сообщений: 19
18.03.2016, 20:45  [ТС] 2
Сделал сам. Прошу пользуйтесь, кому надо. Также ищите баги и пишите мне про них
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#include <iostream>
#include <Windows.h>
using namespace std;
class Sort
{
public:
    int *px;
    int len;
public:
    Sort();//constructor
        ~Sort();//destructor
    void Input();
    Sort(const Sort&X);
    int *get_px()const{ return px; }
    int get_len()const{ return len; }
    void set_len(int l);
    void set_px(int*p);
    void ShakerSort(int &C, int &M);
    void Selection(int &C, int &M);
    void Buble(int &C, int &M);
    void Quick_sort(int l, int r);
    void Output();
};
Sort::~Sort()
{
cout<<"\n Destructor";
delete[]px;
}
Sort::Sort()
{
    cout << "len = ";
    cin >> len;
    cout << "\nConstruct: " << endl;
    px = new int[len];
}
void Sort::Input()
{
    for (int i = 0; i < len; i++)
    {
        cout << "Input " << i + 1 << " element: ";
        cin >> px[i];
    }
}
void Sort::Output()
{
    for (int i = 0; i < len; i++)
    {
        cout << px[i] << " ";
    }
}
Sort::Sort(const Sort &X)
{
    cout << "\nKopirovalshick:\n";
 
    len = X.get_len();
    px = new int[len];
    int *py = X.get_px();
    for (int i = 0; i < len; i++)
    {
        px[i] = py[i];
    }
}
void Sort::Selection(int &C, int &M)
{
    int i, j, x, k, m;
    for (i = 0; i<len - 1; i++)
    {
        x = px[i]; k = i;
        for (j = i + 1; j<len; j++)
        if (px[j]<x) { k = j; x = px[k]; }
        px[k] = px[i]; px[i] = x;
        cout << "\n" << i + 1 << " prochod" << endl;
        for (m = 0; m<len; m++)
        {
            cout << px[m] << " ";
        }
    }
 
}
void Sort::Buble(int &C, int &M)
{
    int i, j, x, k;
    for (i = 1; i<len; i++)
    {
        for (j = len - 1; j >= i; j--)
        if (px[j - 1]>px[j])
        {
            x = px[j - 1];
            px[j - 1] = px[j];
            px[j] = x;
        }
        cout << "\n" << i << " prochod" << endl;
        for (k = 0; k<len; k++)
        {
            cout << px[k] << " ";
        }
    }
}
void Sort::ShakerSort(int &C, int &M)
{
    int i, j, k, x, l, r, p;
    l = 1; r = len - 1; p = 0;
    do
    {
        for (j = r; j >= l; j--)
        if (px[j - 1]>px[j])
        {
            x = px[j - 1];
            px[j - 1] = px[j];
            px[j] = x;
            i = j;
        }
        p++;
        l = i + 1;
        cout << "\n" << p << " prochod" << endl;
        for (k = 0; k<len; k++)
        {
            cout << px[k] << " ";
        }
        for (j = l; j <= r; j++)
        if (px[j - 1]>px[j])
        {
            x = px[j - 1];
            px[j - 1] = px[j];
            px[j] = x;
            i = j;
        }
        r = i - 1;
        p++;
        cout << "\n" << p << " prochod" << endl;
        for (k = 0; k<len; k++)
        {
            cout << px[k] << " ";
        }
    } while (l <= r);
 
}
void Sort::Quick_sort(int l, int r)
{
    int i = l, j = r, x, w, k,trol=0;
    x = px[(l + r) / 2];
    do
    {
        while (px[i]<x) { i++; };
        while (x<px[j]) { j--; };
        if (i <= j)
        {
            w = px[i]; px[i] = px[j]; px[j] = w;
            i++; j--;
        }
    } while (i <= j);
    cout << "\n";
    cout << "\n prchod\n\n";
    for (k = 0; k<len; k++)
    {
        
        cout << px[k] << " ";
    }
 
    if (l<j) Quick_sort(l, j);      //рекурсивный вызов
    if (i<r) Quick_sort(i, r);//рекурсивный вызов
 
}
void main()
{
    int choice;
    int C=0, M=0;
    Sort select;
    select.Input();
    system("CLS");
    cout << endl << "********FIRST MASSIV************" << endl;
    select.Output();
    cout << endl << endl;
    while (1){
        cout << "\n1.Selection" << endl;
        cout << "2.Bubble" << endl;
        cout << "3.Shaker" << endl;
        cout << "4.Quick" << endl;
        cout << "Your choice---> ";
        cin >> choice;
        Sort copy(select);
        cout << endl << "********************" << endl;
        switch (choice){
        case 1: copy.Selection(C, M);
            cout << endl;
            cout << "------------------------------------------------"; break;
        case 2:copy.Buble(C, M);
            cout << endl;
            cout << "------------------------------------------------"; break;
        case 3:copy.ShakerSort(C, M);
            cout << endl;
            cout << "------------------------------------------------"; break;
        case 4:copy.Quick_sort(0, copy.len-1);
        }
    }
    system("pause");
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2016, 20:45
Помогаю со студенческими работами здесь

О конструкторе копирования
Доброго времени суток всем присутствующим. Интересует маленький вопрос. В 15-й строке происходит...

Указатель this в конструкторе копирования
Добрый всем вечер. Подскажите пожалуйста, как правильно применить в конструкторе копирования...

Ошибка в конструкторе копирования
Здравствуйте. Есть один класс для работы с многочленами, который хранит элементы многочлена в...

Ошибка в конструкторе копирования C++
Помогите, пожалуйста создать конструктор копирования, который будет копировать элемент и добавлять...


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

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

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