Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2009, 20:31   #21
Ok-ei
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 22
По умолчанию

А вот как правильно обратиться к постинкременту до сих пор сообразить не могу...
Ok-ei вне форума Ответить с цитированием
Старый 17.08.2009, 20:33   #22
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Может (*S)++; прокатит?
MaTBeu вне форума Ответить с цитированием
Старый 17.08.2009, 20:42   #23
Ok-ei
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 22
По умолчанию

Прокатило, спасибо...
Осталось понять из-за чего постинкремент виснет...
Ok-ei вне форума Ответить с цитированием
Старый 17.08.2009, 21:10   #24
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

т.е. (*S)++ уводит программу в зависшее состояние?
pu4koff вне форума Ответить с цитированием
Старый 17.08.2009, 21:21   #25
Ok-ei
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 22
По умолчанию

Почти...
Уводит программу в зависшее состояние
Код:
UniSchet::UniSchet(const UniSchet &obj)
{
  m=Obj.m;
  S=new Schetchik*[m];
  for (int i = 0; i < m; ++m)
    S[i]=new Schetchik(*obj.S[i]);
  B=new char [m+1];
  B[m]='\0';  
};
А если серьезно:
Код:
UniSchet UniSchet::operator++(int)
   { UniSchet res(*this);
     ++this;
     return res;
   };
После return res идет снова к конструктору копии, а потом ошибка (что-то про чтение не по тому адесу)...
Почему так?
Ok-ei вне форума Ответить с цитированием
Старый 17.08.2009, 21:29   #26
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Ok-ei Посмотреть сообщение
Почти...
Уводит программу в зависшее состояние
Код:
...
  for (int i = 0; i < m; ++m)
  ...  
};
Да уж... С ++m я дейсвительно лоханулся
Цитата:
Сообщение от Ok-ei Посмотреть сообщение
После return res идет снова к конструктору копии, а потом ошибка (что-то про чтение не по тому адесу)...
Почему так?
Конструктор копии должен вызываться, а вот что не так с адресами может там произойти - непонятно. Вроде нигде никаких ошибок не видать...
pu4koff вне форума Ответить с цитированием
Старый 17.08.2009, 21:36   #27
Ok-ei
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Конструктор копии должен вызываться...
Объясните, пожалуйста, почему он должен вызываться после return...
Ok-ei вне форума Ответить с цитированием
Старый 17.08.2009, 21:51   #28
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Ok-ei Посмотреть сообщение
Объясните, пожалуйста, почему он должен вызываться после return...
Ну там же возвращается по значению, а не по ссылке или указателю, соответственно неявно вызывается конструктор копии. Ну как если написать:
Код:
UniSchet S;
UniSchet ss = S; // тут тоже конструктор копии вызовется
Если быть точнее, то он вызывается не после return, а во время него
pu4koff вне форума Ответить с цитированием
Старый 17.08.2009, 22:04   #29
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Ну там же возвращается по значению, а не по ссылке или указателю, соответственно неявно вызывается конструктор копии. Ну как если написать:
Код:
UniSchet S;
UniSchet ss = S; // тут тоже конструктор копии вызовется
Если быть точнее, то он вызывается не после return, а во время него
Не конструктор копии, а копирующее присваивание

Цитата:
Код:
UniSchet UniSchet::operator++(int)
   { UniSchet res(*this);
     ++this;
     return res;
   };
А почему здесь опять ++this, а не ++(*this)? )
netrino вне форума Ответить с цитированием
Старый 17.08.2009, 22:11   #30
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Не конструктор копии, а копирующее присваивание
Какая разница... у меня всегда было плохо с терминологией
Цитата:
Сообщение от netrino Посмотреть сообщение
А почему здесь опять ++this, а не ++(*this)? )
Кстати да. Почему, Ok-ei?
А я ошибку нашел:
Код:
UniSchet::~UniSchet()
   { for (int i=0; i<m; i++)
        delete[] S[i]; // Не нужны тут скобочки
Вроде даже работает чего-то
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку! frantic150 Microsoft Office Excel 0 26.06.2009 18:23
Помогите найти ошибку! Студентка@ Помощь студентам 3 21.05.2008 14:21
Помогите найти ошибку KnDmPetr Паскаль, Turbo Pascal, PascalABC.NET 1 11.04.2008 15:48