Поиск:

Ответ в темуСоздание новой темы Создание опроса
> освобождение памяти, использование структуры vector 
:(
    Опции темы
kosta
Дата 19.6.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.3.2005

Репутация: нет
Всего: нет



есть у меня класс, который содержит в себе как одно из полей данных вектор целых чисел

class TKlaster
{
private:
    vector <int> Ells;
    int EllNumber;
    int ElementsNumber;
    double Lambda;
. . . 

 деструктор

TKlaster::~TKlaster ()
{
Ells.clear();
}


и есть вектор этого класса -  vector <TKlaster> Klasters

при удалении вектора классов делаю вот так

for (int i=Klasters.size()-1;i>=0;i--)
    Klasters[i].~TKlaster();

Klasters.clear();


но на последней строке выдается ошибка

Clase with properties cannot be copied by value


как тогда удалить все что храниться в этом векторе, чтобы опять в него же можно было завписывать новые значения?





 
PM MAIL   Вверх
Vyacheslav
Дата 19.6.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



В данном случае никак не надо удалять.  Деструкторы будет вызван автоматически.
Код ошибочен и не нужен 
Код

for (int i=Klasters.size()-1;i>=0;i--)
    Klasters[i].~TKlaster();

Сообщение "Class with properties cannot be copied by value" связано совсем с другим.
 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
kosta
Дата 19.6.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.3.2005

Репутация: нет
Всего: нет



просто мне надо при нажатии кнопки очистить вектор чтбы можно было в него опять записывать по ходу программы данные, а очистить я его не могу. вот как это сделать я и спрашиваю, потому что при написании просто Klasters.clear(); прога не компилится

Добавлено @ 17:25 
просто у меня туда завписыываються по ходу программы данные, потом при нажатии кнопки хочу сджелать Klasters.clear();
, чтобы можно было дальше при вызове Klasters.push_back(); можно было опять заносить данные, но при попытки вызвать Klasters.clear(); компилятор выдает вот ту ошибку 
PM MAIL   Вверх
Vyacheslav
Дата 19.6.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Еще раз. Если Вы правильно написали сообщение об ошибке, то  ошибка связана совсем с другим.
Для очистки вектора лостаточно clear() 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
kosta
Дата 19.6.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.3.2005

Репутация: нет
Всего: нет



я приблизительно понимаю с чем связана ошибка (как мне кажеться +) ) но если я убираю строку 

Klasters.clear();

 то ошибка не появляется, правда потом естесно выходят траблы с данными 
PM MAIL   Вверх
Vyacheslav
Дата 19.6.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Вы property используете в Ваших классах?  


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Fazil6
Дата 19.6.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



константные члены есть в классе TKlaster?
конструктор копии у тебя есть в TKlaster?

Добавлено @ 17:47 
а вообще здесь напрашивается vector <TKlaster*> Klasters
с созданием через new и удалением delete перед Klastersю.clear() 
PM MAIL   Вверх
kosta
Дата 19.6.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.3.2005

Репутация: нет
Всего: нет



проперти в классе есть
констант нет 
PM MAIL   Вверх
Vyacheslav
Дата 19.6.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Ну так в чем вопрос тогда? В переводе на русский?

Class with properties cannot be copied by value

Class  с пропертями не может быть скопировван по значению

А эту операцию очень часто использует вектор.

Добавлено @ 18:16 
Попробуй определить копирующий конструктор и оператор копирования 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
kosta
Дата 19.6.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.3.2005

Репутация: нет
Всего: нет



если чесна то про копирующий конструктор недопонял , что ето такое и с чем его едят ...  smile  
PM MAIL   Вверх
Fazil6
Дата 19.6.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Цитата

если чесна то про копирующий конструктор недопонял , что ето такое и с чем его едят ... 

упс... А как ты на С++ пишешь, да еще с stl и не знаешь что это такое? 
1. Почитай книжку на тему конструкторов, их видов и operator = 
2. Ссылки
3. В данном конкретном примере проще и намного эфективнее использовать хранение не объектов в векторе, а указателей 
PM MAIL   Вверх
kosta
Дата 19.6.2006, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.3.2005

Репутация: нет
Всего: нет



конкретно про конструкторы и переопределение операций я знаю, просто не встречался по работе с копирующими конструкторами как таковыми, терь уже почитал и понял, что надо делать вктор указателей. Спасибо всем за помощь 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.