Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создать объект - Удалить объект

270
27 августа 2002 года
Drew
265 / / 20.07.2000
Люди, у меня ПРОСТОЙ вопрос
я только начинаю - не обессудьте...

Задекларировал я открытие потока для работы с файлом и буфер через 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;
}
600
27 августа 2002 года
trump-card
6 / / 20.12.1999
Ты объявил переменные fs и bu в функции FormCreate и область видимости этих переменных только фун-я FormCreate, поэтому FormDestroy их не видит.
Один из вариантов, это поместить объявление этих переменных в описание класса в .h файле,
например,
class TForm1 : public TForm
{
...
public:
TFileStream *fs;
int *bu;
...
};
270
28 августа 2002 года
Drew
265 / / 20.07.2000
Цитата:

On 2002-08-27 0616, trump-card wrote
Ты объявил переменные fs и bu в функции FormCreate и область видимости этих переменных только фун-я FormCreate, поэтому FormDestroy их не видит.
Один из вариантов, это поместить объявление этих переменных в описание класса в .h файле,
например,
class TForm1 public TForm
{
...
public
TFileStream *fs;
int *bu;
...
};


ну только наверное не в PUBLIC...

270
28 августа 2002 года
Drew
265 / / 20.07.2000
Цитата:

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]
... гм... в приципе все получается... даже при декларации в модуле формы (СРР)

577
28 августа 2002 года
Mozhay
81 / / 20.09.2000
Цитата:

On 2002-08-27 2247, Drew wrote
ну только наверное не в PUBLIC...


Тебе решать... Лучше, конечно, не в public. Но вполне можно и туда.

Цитата:

... гм... в приципе все получается... даже при декларации в модуле формы (СРР)


Т.е. ты их сделал глобальными? Это, наверное, зря. А что получится, если будет две такие формы в одном приложении? Лучше, все таки, объявить их членами класса (совсем необязательно статическими).

Аноним
[/quote]
Т.е. ты их сделал глобальными? Это, наверное, зря. А что получится, если будет две такие формы в одном приложении? Лучше, все таки, объявить их членами класса (совсем необязательно статическими).
[/quote]
да нет... это не глобальные.. это получается то же, что и помещение в .H - те же "balls" только впрофиль )

у меня другой вопрос... ты когда-нибудь в ТС программировал? в частности очереди, векторы, массивы и т.п.
просто ТС при компиляции хочет бибилиотеку
TCLASSx.LIB где x соответствует модели памяти...
577
30 августа 2002 года
Mozhay
81 / / 20.09.2000
Цитата:

да нет... это не глобальные.. это получается то же, что и помещение в .H - те же "balls" только впрофиль )


Можно примерчик? Просто интересно, как можно так сделать.

Цитата:

у меня другой вопрос... ты когда-нибудь в ТС программировал?


Не программировал. А что?

270
31 августа 2002 года
Drew
265 / / 20.07.2000
Цитата:

On 2002-08-30 1119, Mozhay wrote
Можно примерчик? Просто интересно, как можно так сделать.


по поводу примера - посмотри в СРР модуле где задекларирована форма

TMainForm *MainForm

ТАМ же можно прописать и переменные. Собственно говоря #include <.h> делает для компилятора то же самое...

а по поводу ТС

в частности очереди, векторы, массивы и т.п.
просто ТС при компиляции хочет бибилиотеку
TCLASSx.LIB где x соответствует модели памяти.

442
03 сентября 2002 года
HexoGenus
121 / / 20.03.2000
Главное различие в том что при твоем способе размещения ты не сможешь ссылаться на указатель из другой формы ...
Например в Form2 не сможешь написать
Form1->fs
а если объявишь переменную как глобальную то не сможешь копировать форму в нескольких экземплярах в одном приложении...
И вообще все что делается в билдере по моему глубокому убеждению должно быть привязано к классу своего окна (иначе теряются преимущества использования репрозитория объектов и прийдется самому отвечать за удаление объектов)... а то что является общим для нескольких окон можно прописывать в DataModule.
С уважением HexoGenus.
Аноним
'int *bu=new int[256]' - ерунда какая-то, объявляешь просто 'int bu[256]'
Короче
В заголовке формы
int bu[256];
TFileStream *fs;
В FormCreate
fs = new TFileStream(&quot;c\\autoexe.bat&quot;, fmOpenRead | fmShareDenyNone);
В FormDestroy
delete fs;

И все.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог