Wasabi |
Отправлено: 08.09.2004, 10:57 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 23
|
1. Есть массив указателей (допустим TControl).
Есть процедура в которую мне надо передать этот массив чтобы обработать эти контролы на которые указывают указатели в массиве.
Как это сделать с точки зрения синтаксиса?
2. Как задать размер массиву указателей?
Например есть
TControl ptr[Кол-во];
Хочу чтобы он по размеру соответствовал количеству контролов допустим на Панеле.
Типа такого
TControl ptr[Panel1->ControlCount];
Компилятор конечно меня посылает. Как написать правильно?
Спасибо |
|
Konstantine |
Отправлено: 08.09.2004, 11:29 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Размер в этом случае токо динамически:
CODE | int size=Panel1->ControlCount;
TControl **arr=new TControl*[size];
...
Юзаешь его
...
delete arr;
| а в фунцию передать типа этого:
CODE | определение функции: void func(TControl** ar, int s);
вызов: func(arr,size);
|
|
|
Dima |
Отправлено: 08.09.2004, 11:57 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
с точки зрения синтаксиса это можно сделать так :
CODE |
// создать массив указателей на указатели
TControl **ptr = new TControl*[Panel1->ControlCount];
// инициализировать указатель
ptr[0] = new TControl(Form1);
ptr[0]->BringToFront();
Func(ptr, Panel1->ControlCount);
//сперва нужно удалить элементы
delete ptr[0];
// теперь можно удалить сам массив
delete[] ptr;
void Func(TControl **p, int size)
{
int i=0;
if(i < size)
p[i]->BringToFront();
}
|
использовать выражение типа :
TControl *ptr = new TControl[Panel1->ControlCount];
нельзя, т.к. объект TControl не имеет конструктора по умолчанию
|
|
Konstantine |
Отправлено: 08.09.2004, 12:26 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
QUOTE (Dima @ 08/09/2004, 12:59) | //сперва нужно удалить элементы
delete ptr[0];
// теперь можно удалить сам массив
delete[] ptr; |
А по-моему он сам удаляет (посмотри при дебагере)
|
|
Doga |
Отправлено: 08.09.2004, 13:29 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Лучше через TList, не надо будет передавать в функцию кол-во елементов массива.
CODE |
TList *ControlList = new TList();
//Указатели могут быть на разные классы, напр:
ControlList->Clear();
ControlList->Add(Edit1);
ControlList->Add(Edit2);
ControlList->Add(ComboBox1);
ControlList->Add(Panel1);
//...
//void __fastcall Func(TList *AControlList );
Func(ControlList);
//кол-во елементов массива ControlList->Count
//Удаляем ControlList
delete ControlList;
|
|
|
Dima |
Отправлено: 08.09.2004, 13:53 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
QUOTE (Konstantine @ 08/09/2004, 13:28) | А по-моему он сам удаляет (посмотри при дебагере) |
Это вопрос стиля. Рекомендуется явно созданные объекты удалять явно. |
|
Konstantine |
Отправлено: 08.09.2004, 14:10 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
кстати в исходном вопросе не было того, что эти объекты нада создать... Я так понял, что эти объекты созданы, но их нада вкинуть в ф-цию.
|
|