Создать объект - Удалить объект
я только начинаю - не обессудьте...
Задекларировал я открытие потока для работы с файлом и буфер через NEW
???? как в ДРУГОЙ функции (FormDestroy) сделать их удаление ???
BC говорит, что он не может найти переменные fs и bu!!!
если сделать их общими для класса формы, то С требует их декларации как статических объектов, а мне это не надо - я хочу иметь контроль за обращением к файлу - EOpenError - исключение
инициализация класса потока значением Null тоже не катит, ... ну там ошибка преобразования вида...
void __fastcall TForm1FormCreate(TObject *Sender)
{
int *bu=new int[256];
try {
TFileStream &fs=*new TFileStream("c\\autoexe.bat",fmOpenRead|fmShareDenyNone);
}
catch(EFOpenError &oe)
{
ShowMessage("Ошибка "+oe.Message);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1FormDestroy(TObject *Sender)
{
delete[] bu;
delete& fs;
}
Один из вариантов, это поместить объявление этих переменных в описание класса в .h файле,
например,
class TForm1 : public TForm
{
...
public:
TFileStream *fs;
int *bu;
...
};
On 2002-08-27 0616, trump-card wrote
Ты объявил переменные fs и bu в функции FormCreate и область видимости этих переменных только фун-я FormCreate, поэтому FormDestroy их не видит.
Один из вариантов, это поместить объявление этих переменных в описание класса в .h файле,
например,
class TForm1 public TForm
{
...
public
TFileStream *fs;
int *bu;
...
};
ну только наверное не в PUBLIC...
On 2002-08-27 2238, Drew wrote
[quote]
On 2002-08-27 0616, trump-card wrote
Ты объявил переменные fs и bu в функции FormCreate и область видимости этих переменных только фун-я FormCreate, поэтому FormDestroy их не видит.
Один из вариантов, это поместить объявление этих переменных в описание класса в .h файле,
например,
class TForm1 public TForm
{
...
public
TFileStream *fs;
int *bu;
...
};
ну только наверное не в PUBLIC...
[/quote]
... гм... в приципе все получается... даже при декларации в модуле формы (СРР)
On 2002-08-27 2247, Drew wrote
ну только наверное не в PUBLIC...
Тебе решать... Лучше, конечно, не в public. Но вполне можно и туда.
... гм... в приципе все получается... даже при декларации в модуле формы (СРР)
Т.е. ты их сделал глобальными? Это, наверное, зря. А что получится, если будет две такие формы в одном приложении? Лучше, все таки, объявить их членами класса (совсем необязательно статическими).
Т.е. ты их сделал глобальными? Это, наверное, зря. А что получится, если будет две такие формы в одном приложении? Лучше, все таки, объявить их членами класса (совсем необязательно статическими).
[/quote]
да нет... это не глобальные.. это получается то же, что и помещение в .H - те же "balls" только впрофиль )
у меня другой вопрос... ты когда-нибудь в ТС программировал? в частности очереди, векторы, массивы и т.п.
просто ТС при компиляции хочет бибилиотеку
TCLASSx.LIB где x соответствует модели памяти...
да нет... это не глобальные.. это получается то же, что и помещение в .H - те же "balls" только впрофиль )
Можно примерчик? Просто интересно, как можно так сделать.
у меня другой вопрос... ты когда-нибудь в ТС программировал?
Не программировал. А что?
On 2002-08-30 1119, Mozhay wrote
Можно примерчик? Просто интересно, как можно так сделать.
по поводу примера - посмотри в СРР модуле где задекларирована форма
TMainForm *MainForm
ТАМ же можно прописать и переменные. Собственно говоря #include <.h> делает для компилятора то же самое...
а по поводу ТС
в частности очереди, векторы, массивы и т.п.
просто ТС при компиляции хочет бибилиотеку
TCLASSx.LIB где x соответствует модели памяти.
Например в Form2 не сможешь написать
Form1->fs
а если объявишь переменную как глобальную то не сможешь копировать форму в нескольких экземплярах в одном приложении...
И вообще все что делается в билдере по моему глубокому убеждению должно быть привязано к классу своего окна (иначе теряются преимущества использования репрозитория объектов и прийдется самому отвечать за удаление объектов)... а то что является общим для нескольких окон можно прописывать в DataModule.
С уважением HexoGenus.
Короче
В заголовке формы
int bu[256];
TFileStream *fs;
В FormCreate
fs = new TFileStream("c\\autoexe.bat", fmOpenRead | fmShareDenyNone);
В FormDestroy
delete fs;
И все.