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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Не понятно шо за ошибка? http://www.cyberforum.ru/cpp-beginners/thread854680.html
Здорова! Пытаюсь создать список вот код: #include <iostream> using std::cout; using std::endl; using std::cin; template<class T> class List//optimal6nui {
C++ Вычислить среднее геометрическое. ФУНКЦИИ Вычислить среднее геометрическое для каждого элемента одномерного массива по следующему правилу : (см. картинку) Использовать функцию вычисления среднего геометрического одномерного массива. http://www.cyberforum.ru/cpp-beginners/thread854670.html
Предел макисально целого числа C++
Подскажите пожалуйста, В СРР есть предел макисально целого числа он записан в long long int, есть ли какая-то возможность обойти этот предел. P.S. Если не понятно вышенаписанное, я имел ввиду, что для вычисления факториала больше 20 потребуется реализовать длинную арифметику, но может есть способо вычислить факториал без этого, просто сняв ограничение по long long int? Компьютеру все равно что...
Поиск остовного леса методом Соллина C++
Доброго времени суток. Передо мной встала задача найти остовной лес минимальной стоимости методом Соллина. Интернет предложил единственный вариант реализации данного алгоритма (приведён ниже). Сразу скажу, ошибка в том, что он не делает разницы было ли рассмотрено ребро или нет (т.е. 2 раза рассмотреть одно и то же ребро, от начальной вершины к конечной и наоборот). Соответственно, к...
C++ Итерационные и рекурсивные алгоритмы http://www.cyberforum.ru/cpp-beginners/thread854644.html
Вычислить на ЭВМ значение суммы членов бесконечного ряда с заданной точностью и значение суммы, определяемое пределом суммы ряда ( по формуле). Напечатать значения сумм и число циклов ряда, вошедших в сумму. На с++. Sin(x)=∑(-1)n-1*x^(2n-1)/(2n-1)!=x - x^3/3! + x^5/5!-x^7/7! +x^9/9! - x^11/11!
C++ Чистая виртуальная функция Скажите, может ли чистая виртуальная функция иметь тело? В книге написано что может, но не написано как. Пытался сам определить по-разному - не получилось. В интернете нашел пару примеров с телами, но они тоже не работают. подробнее

Показать сообщение отдельно
vruleb
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 17
03.05.2013, 17:38  [ТС]     Ошибка в конструкторе копирования
Цитата Сообщение от Tulosba Посмотреть сообщение
vruleb, стандартные классы использовать нельзя? 32 строка, кстати, лишняя.
Цитата Сообщение от abit Посмотреть сообщение
oO
C++
1
2
3
4
5
6
7
8
9
10
Pol(Pol &e)  // конструктор копирования
   {
       Pol *z=new Pol();
       Element *i=e.first;  // указатель на первый элемент входного многочлена
       while(i)
       {
           cout << i->getData();
           Add(i->getData());  // добавить все элементы в многочлен
           i=i->next;
       }
копайте в теорию c начала, мой мозг отказался это вообще понимать


тут вы выделяете память для Pol, в адресе z, в конструкторе этот адрес не используете, по выходу из конструктора z как указатель помирает, память остаётся, непонятно зачем

далее

C++
1
Add(i->getData());
вообще шикарно, вы хотели прибавить к адресу функции getData() единицу что ли? дело в том, что как выполнится i->getData() она вернёт вам число в поле *(i->data) и никакой связи с полем иметь не будет

если эти измышления описать в более-менее логичном формате должно быть что-то типа такого
C++
1
2
3
4
5
6
7
8
9
10
11
Pol(Pol &e)
   {
       this->first = new Element;
       this->last = new Element;
       Element *i = this->first;
       while (i)
       {
             i->setData(i->getData()+1);
             i=i->next;
       }
   }
но опять же тут надо вникать в логику программы, чтобы знать что и куда копировать, а я всё больше вникаю в ваш конструктор копирования



ничего странного, там не вызывается конструктор копирования, вызывается впервые он у вас при передачи параметра b в функцию test, чтобы создать локальную копию Pol для внутренностей функции test
Да, действительно, строка Pol *z=new Pol() лишняя, забыл удалить её после экспериментов с этим конструктором.
Стандартные классы, к сожалению, использовать нельзя.
По логике, мой конструктор должен поэлементно добавлять элементы в новый объект с помощью функции Add(). А функция i->getData() же получает значения элементов копируемого объекта и добавляет в новый.
 
Текущее время: 01:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru