| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Подскажите как применить Мои класс ? |
| Автор: beautifulll 15.10.2006, 21:11 |
| Есть класс (мне с ним на этом форуме помогли): class Styles { protected: TFontStyles FontStyle; TRichEdit *RichEdit; public: Styles( TRichEdit *Edit ); void Underline_true(); // подчёркивание void Underline_false(); void StrikeOut_true(); // зачёркивание void StrikeOut_false(); }; Как исп-ть его для RichEdit1 , который уже на форме. Сперва надо объявить какой-нибудь любой объект этого типа, в смысле: Styles NewOb(TRichEdit *RichEdit1); ??? Только тогда почему-то исп-ние функций класса не получается, т.е. на строку NewOb.StrikeOut_true(); выдается ошибка, типа "left . or .*" А как надо не знаю |
| Автор: fry 15.10.2006, 23:27 |
| Код StrikeOut_true() можно увидеть? |
| Автор: fry 15.10.2006, 23:52 |
| проверь . и -> И еще мне не нравиться >> и << в методах класса, но это так.... |
| Автор: Oberon83 16.10.2006, 11:23 | ||||
| beautifulll, код конструктора класса какой? В конструкторе необходимо присвоить: RichEdit = Edit. Во вторых при создании класса:
либо
|
| Автор: beautifulll 16.10.2006, 19:15 |
| Я так делала Styles NewOb(Твой RichEdit);, т.е. Styles NewOb(Form1-> RichEdit1); а он всё работать не хочет именно когда я ввожу эту строчку, как ее уберу остальное запускается. А сами функции вот какие: #pragma hdrstop #include "Unit2.h" Styles::Styles( TRichEdit *Edit ) { RichEdit = Edit; FontStyle = Edit->SelAttributes->Style; } //--------------------------------------------------------------------------- void Styles::StrikeOut_true() { FontStyle << fsStrikeOut; RichEdit->SelAttributes->Style = FontStyle; } //--------------------------------------------------------------------------- |
| Автор: Oberon83 17.10.2006, 08:05 | ||
| beautifulll, и какую ошибку показывает? Скорее всего ошибка доступа к памяти, поскольку ты под свой класс память не выделяешь. Попробуй так:
Должно получиться. |
| Автор: beautifulll 17.10.2006, 20:09 |
| Так не получается: в строке Styles NewOb; выдает ошибку: Could not find a match for ‘Styles::Styles()’ В строке NewOb =new Styles(Form1->RichEdit1); ошибка Type name expected. Единственный вариант когда программа запускается- это Styles NewOb(Form1->RichEdit1); При таком варианте хотя б когда пишу потом NewOb. автоматически предлогается список функций моего класса. Но выдает ошибку памяти после запуска. |
| Автор: Oberon83 18.10.2006, 08:44 |
| beautifulll, код приложения и класса в студию. Где подключается класс? Ошибку памяти выдает потому что ты под свой объект класса память не выделяешь. |
| Автор: beautifulll 18.10.2006, 20:11 | ||||||
Вот то что для формы на которой только RichEdit1 и кнопка
Вот то что для описания моего класса: это Unit2.h
А вот где функции описаны Unit2.cpp:
Я вроде бы понимаю, что проблемы с памятью, а как решить то их незнай!!! |
| Автор: segmentation_fault 18.10.2006, 21:15 | ||
beautifulll, напиши так:
|
| Автор: beautifulll 19.10.2006, 19:32 |
| Если я объявляю объект в каждой процедуре нажатия кнопки, то всё работает, т.е.: void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { Styles *Clas = new Styles(Form1->RichEdit1); (*Clas).StrikeOut_false(); } Но у меня же будет еще несколько кнопок, по нажатию которых мне нужен объект моего класса , разве так правильно выделять место памяти для объекта моего класса каждый раз(в каждой процедуре кнопки)? А если __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Styles *Clas = new Styles(Form1->RichEdit1); } То объект Clas не узнается в процедуре нажатия кнопки. ВСЁ, РАЗОБРАЛАСЬ, ВСЁ ВЫХОДИТ ТЕПЕРЬ.ГЛУПЫШКА ПРОСТО. СПАСИБО ВСЕМ БОЛЬШОЕ!!!в жизни бы сама не додумалася. |