Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не понятно шо за ошибка? Здорова! Пытаюсь создать список вот код: #include <iostream> using std::cout; using std::endl; using std::cin; template<class T> class List//optimal6nui { https://www.cyberforum.ru/ cpp-beginners/ thread854680.html C++ Вычислить среднее геометрическое. ФУНКЦИИ
Вычислить среднее геометрическое для каждого элемента одномерного массива по следующему правилу : (см. картинку) Использовать функцию вычисления среднего геометрического одномерного массива.
C++ Предел макисально целого числа https://www.cyberforum.ru/ cpp-beginners/ thread854657.html
Подскажите пожалуйста, В СРР есть предел макисально целого числа он записан в long long int, есть ли какая-то возможность обойти этот предел. P.S. Если не понятно вышенаписанное, я имел ввиду, что...
C++ Поиск остовного леса методом Соллина https://www.cyberforum.ru/ cpp-beginners/ thread854651.html
Доброго времени суток. Передо мной встала задача найти остовной лес минимальной стоимости методом Соллина. Интернет предложил единственный вариант реализации данного алгоритма (приведён ниже). Сразу...
C++ Итерационные и рекурсивные алгоритмы
Вычислить на ЭВМ значение суммы членов бесконечного ряда с заданной точностью и значение суммы, определяемое пределом суммы ряда ( по формуле). Напечатать значения сумм и число циклов ряда, вошедших...
C++ Чистая виртуальная функция https://www.cyberforum.ru/ cpp-beginners/ thread854601.html
Скажите, может ли чистая виртуальная функция иметь тело? В книге написано что может, но не написано как. Пытался сам определить по-разному - не получилось. В интернете нашел пару примеров с телами,...
C++ Надо написать функцию, которая по массиву действительных чисел x1, x2, ..., xn находит произведение положительных элементов массива https://www.cyberforum.ru/ cpp-beginners/ thread854589.html
Надо написать функцию, которая по массиву действительных чисел x1, x2, ..., xn находит произведение положительных элементов массива.Вот у меня уже есть программа, только здесь для 10 элементов. Как...
vector.clear C++
У меня вопрос по поводу метода clear(). Пусть у меня в векторе было 30 элементов, после вызова этого метода их стало 0, поэтому size() тоже вернет 0. Но вот capacity() показывает 30, т.е. если я...
C++ точность, настраиваемая вручную Мне нужно произвести расчет с точность 27 знаков после запятой. Long double не хватает. Как определить вручную? Добавлено через 2 часа 4 минуты :umnik: https://www.cyberforum.ru/ cpp-beginners/ thread854568.html C++ FreeConsole не работает https://www.cyberforum.ru/ cpp-beginners/ thread854559.html
FreeConsole не работает если программу запустить через другую программу командой system("start путь к программе"); а если саму программу без посторонних включить то работает, что делать
C++ C++ связь символов ?
Скажите как узнать когда и в какую строку вставлять тот или другую функцию и символы ?
C++ Итератор для контейнера https://www.cyberforum.ru/ cpp-beginners/ thread854545.html
Собственно, интересует такой вопрос: "Как создать собственный класс-итератор для контейнера?". Контейнер построен по типу "очередь". Содержимое контейнера - это фигуры (производные классы от...
0 / 0 / 1
Регистрация: 26.05.2012
Сообщений: 17
0

Ошибка в конструкторе копирования - C++ - Ответ 4502689

03.05.2013, 09:57. Показов 775. Ответов 3
Метки (Все метки)

Здравствуйте. Есть один класс для работы с многочленами, который хранит элементы многочлена в списке. Так вот, в конструкторе копирования (строка 30) происходит непонятная ошибка. Что самое странное, метод для добавления новых элементов многочлена работает нормально, так как сам по себе спокойно выполняет свои действия.
В какую сторону копать?
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
#include <iostream>
 
using namespace std;
 
class Pol{
public:
   class Element{                     
   private: 
      int *data; // элемент многочлена
   public: 
      Element *next; // следующий элемент
      Element *prev; // предыдущий
      Element():next(NULL),prev(NULL){data=new int(0);}; // конструктор по-умолчанию
      Element(int val):next(NULL),prev(NULL){data=new int(val);}; // перегруженный конструктор
      Element (Element &e)      // конструктор копирования
      {
         data=new int(e.getData());
         next=e.next;
         prev=e.prev;
      }
      ~Element(){if (data) delete data;next=prev=NULL;}  // деструктор
 
      int getData(){return *data;}  // метод для получения
      void setData(int val){*data=val;} // и установки данных
   };
   public: 
   Element *first; // первый элемент
   Element *last; // последний
   Pol(Pol &e)  // конструктор копирования
   {
       Pol *z=new Pol();
       Element *i=e.first;  // указатель на первый элемент входного многочлена
       while(i)
       {
           cout << i->getData();
           Add(i->getData());  // добавить все элементы в многочлен
           i=i->next;
       }
   }
   Pol():first(NULL),last(NULL){} 
   Pol operator *()
   {
       return *this;
   }
   virtual ~Pol() // деструктор списка
   {
      Element *p=last;
      while(p)
      {
         Element *pt=p;
         p=p->prev;  
         delete pt; // удаление элементов с конца
      }
      first=last=NULL; // и указателей
   } 
protected:
   void coreAdd(int val)
   {
      Element *t=new Element(val); // создать новый элемент с содержимым val
      if(first==NULL)   // если элементов нет
      {
         first=last=t; // то он первый и последний
         first->next=last->next=NULL; 
         first->prev=last->prev=NULL;
         return; 
      }
      // если есть элементы
      last->next=t; // добавляем после последнего
      t->prev=last; // бывший последний теперь предпоследний
      last=t; // последний - новый элемент
      last->next=NULL;
      return;
   }
   void coreDelete(int n)  
   {
      // поиск выбранного элемента
      if (n<=0)
          cout << "Элемент не найден\n";
      n--; 
      Element *i = first;
      int k=0;
      while (i && k<n)
      {
         i = i->next;
         k++;
      }
 
      if (i)
      {
          i->setData(0); // занулить коэффициент
          if (i==last)  // если занулённый коэффициент - последний коэффициент при многочлене
              while(i->prev!=NULL && i->getData()==0)            // то удалить все нулевые элементы позади
              {
                  Element *t = new Element(*last);
                  last=last->prev;
                  last->next=NULL;
                  delete t;
                  i=i->prev;
              }
      }
   }
public:
   // добавление в конец списка
   virtual void Add(int val) 
   {
      coreAdd(val);
   }
   // удаление элемента
   virtual void Delete(int n)  
   {
      coreDelete(n);
   }
   // вывод многочлена
   friend ostream &operator<<( ostream &output, const Pol &elem)
   {
      int g, h=0;
      Element *i=elem.first;
      cout << endl;
      while (i) // пока есть элементы
      {
        g=i->getData();
        if (g < 0)    // Если коэффициент - отрицательное число
        {                    
        if (h==0)
         cout << g;
        else
            cout << g << "x^" << h; 
        h++;
        }
        if (g==0)
        {
            h++; cout << "+0";
        }
        if (g > 0)
        {
         if (h==0)
             cout << "+" << g;
         else 
             cout << "+" << g << "x^" << h;
         h++;
        }
            i=i->next; // в направлении --->>> 
      }
      return output;
   }
   };
 
void test(Pol a)
{
    Pol c=a;
}
 
int main()
{
    int h=2, l=67;
    Pol b, k; // создать два объекта класса Pol
    b.Add(566); b.Add(453); // заполнить их
    cout << b;
    test(b);
    getchar();
}


Вернуться к обсуждению:
Ошибка в конструкторе копирования C++
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2013, 09:57
Готовые ответы и решения:

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

Ошибка в конструкторе копирования
Всем привет, не могу понять проблему, у меня есть структура: struct WindowRender : public...

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

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

3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2013, 09:57
Помогаю со студенческими работами здесь

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

Параметр в конструкторе копирования
Есть класс class CMatrix{ valarray&lt;valarray&lt;double&gt; &gt; matrix; public: CMatrix(const...

Зачем нужна ссылка в конструкторе копирования
Вопрос такой, Зачем нужна ссылка в конструкторе копирования? Почему не передавать напр. по...

Ссылка rvalue в конструкторе копирования и операторе присваивания
Здравствуйте. Решил попробовать ссылки rvalue в классе. Привожу часть: \\BinaryArray.h ...

Можно ли в конструкторе копирования поменять один параметр?
Здравствуйте. Мне нужно при создании объекта через конструктор копирования поменять один параметр в...

Исправить ошибку в конструкторе копирования пользовательского класса Sort
Здравствуйте. Такая вот проблема. Обычный конструктор работает без ошибок и подчеркиваний: ...

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