![]() |
|
![]() ![]() ![]() |
|
kosta |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 как тогда удалить все что храниться в этом векторе, чтобы опять в него же можно было завписывать новые значения? |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
В данном случае никак не надо удалять. Деструкторы будет вызван автоматически.
Код ошибочен и не нужен
Сообщение "Class with properties cannot be copied by value" связано совсем с другим. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
kosta |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.3.2005 Репутация: нет Всего: нет |
просто мне надо при нажатии кнопки очистить вектор чтбы можно было в него опять записывать по ходу программы данные, а очистить я его не могу. вот как это сделать я и спрашиваю, потому что при написании просто Klasters.clear(); прога не компилится
Добавлено @ 17:25 просто у меня туда завписыываються по ходу программы данные, потом при нажатии кнопки хочу сджелать Klasters.clear(); , чтобы можно было дальше при вызове Klasters.push_back(); можно было опять заносить данные, но при попытки вызвать Klasters.clear(); компилятор выдает вот ту ошибку |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Еще раз. Если Вы правильно написали сообщение об ошибке, то ошибка связана совсем с другим.
Для очистки вектора лостаточно clear() -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
kosta |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.3.2005 Репутация: нет Всего: нет |
я приблизительно понимаю с чем связана ошибка (как мне кажеться +) ) но если я убираю строку
Klasters.clear(); то ошибка не появляется, правда потом естесно выходят траблы с данными |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Вы property используете в Ваших классах?
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
константные члены есть в классе TKlaster?
конструктор копии у тебя есть в TKlaster? Добавлено @ 17:47 а вообще здесь напрашивается vector <TKlaster*> Klasters с созданием через new и удалением delete перед Klastersю.clear() |
|||
|
||||
kosta |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.3.2005 Репутация: нет Всего: нет |
проперти в классе есть
констант нет |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Ну так в чем вопрос тогда? В переводе на русский?
Class with properties cannot be copied by value Class с пропертями не может быть скопировван по значению А эту операцию очень часто использует вектор. Добавлено @ 18:16 Попробуй определить копирующий конструктор и оператор копирования -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
kosta |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.3.2005 Репутация: нет Всего: нет |
если чесна то про копирующий конструктор недопонял , что ето такое и с чем его едят ...
![]() |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
упс... А как ты на С++ пишешь, да еще с stl и не знаешь что это такое? 1. Почитай книжку на тему конструкторов, их видов и operator = 2. Ссылки 3. В данном конкретном примере проще и намного эфективнее использовать хранение не объектов в векторе, а указателей |
|||
|
||||
kosta |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.3.2005 Репутация: нет Всего: нет |
конкретно про конструкторы и переопределение операций я знаю, просто не встречался по работе с копирующими конструкторами как таковыми, терь уже почитал и понял, что надо делать вктор указателей. Спасибо всем за помощь
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |