0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36

Работа с классами в билдере. Функции

09.03.2009, 13:37. Показов 7518. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть задание - написать опеределенную программу - сглаживания данных.
Есть техническое задание, по которому эта программа должна быть написана.
За два дня написал саму прогу (прога то простая, относительно, все основные действия по нажатию одной кнопки).
Вот только по тех. заданию, в программе обязательно должны присутствовать классы, и описано, какие, и с какими функциями.

Так вот, я не могу разобраться, как же работать с классами в билдере.
Есть файл unit1.cpp, в котором написан весь код
Нужно в заголовочный файл (unit1.h) перенести часть кода, раскидать по функциям и классам, да так чтобы работало))
В-общем-то, работу классов и функций себе представляю. Однако, при переносе, например вот такого кода в заголовочный файл в ф-ию
C++
1
2
3
4
5
6
7
8
FileInput()
        {
                if (!OpenDialog1->Execute()) return;
                TStringList *list = new TStringList;
                list->LoadFromFile(OpenDialog1->FileName);
                Edit1->Text = list->Strings[0];
                delete list;
        }
си выдает ошибку, что мол OpenDialog1 не определен.

В-общем, если кто может, помогите мне на примере данного кода (чтения данных из файла) разобраться с классами/функциями. Буду премного благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2009, 13:37
Ответы с готовыми решениями:

Работа с формами в билдере!
Вообщем у меня есть Form1,и какая-то функция в другом юните. В Form1 ,в обработчике нажатия кнопки ,я вызываю эту функцию,и во время её...

Работа с файлами в Билдере
подскажите пожалуйста, а как записать содержимое StringGrid в файл? а то на SaveToFile он не отзывается, а по другому как я пока не знаю) ...

Работа с внешними файлами в билдере
Здравствуйте. Вопрос заключается в следующем. Имеется код: int kupyiri,moneti; float chislo; OpenDialog1-> Filter = "Файлы ...

27
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
09.03.2009, 13:43
Ну значит у тебя нет объекта OpenDialog1. Объяви его в области видимости класса.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
09.03.2009, 13:45
хм... это значит не надо бездумно копировать код из форума
0
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36
09.03.2009, 13:49  [ТС]
Vourhey, стоп. или в области видимости класса.. кажется, понял

сделал в области видимости класса. Билдер ругается теперь на то, что функция должна возвращать значение.
вот код (не пинайте сильно, еще чуть чуть, и я от вас отстану)

Unit1.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class EnterData
{
public:
TOpenDialog *OpenDialog1;
TEdit *Edit1;
FileInput()
        {
                if (!OpenDialog1->Execute()) return;
                TStringList *list = new TStringList;
                list->LoadFromFile(OpenDialog1->FileName);
                Edit1->Text = list->Strings[0];
                delete list;
        };
}
Unit1.cpp:
C++
1
2
3
4
5
void __fastcall TForm1::Button1Click(TObject *Sender)
{
EnterData in;
in.FileInput();
}
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.03.2009, 13:59
напиши точно, как ошибка звучит?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
09.03.2009, 14:00
Ну и правильно ругается. А почему у тебя функция без возвращаемого значения?
0
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36
09.03.2009, 14:02  [ТС]
WooDooMan, Function should return a value

Vourhey, а потому что, собственно, что ей там возвращать? Функция просто открывает ОпенДиалог и втыкает значение из выбранного файла в Edit1->Text
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
09.03.2009, 14:05
А потому что по синтаксису любая функция должна возвращать значение. У тебя не конструктор и не деструктор. void.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.03.2009, 14:11
я делал иначе:
располагал на форме и эдит и диалог
Код C++
  1. AnsiString FileInput(AnsiString FileName){
  2. AnsiString Res = "";TStringList *list = new TStringList();
  3. list->LoadFromFile(FileName);
  4. Res = list->Text;delete list;
  5. return Res;
  6. };
  7. ...
  8. void __fastcall TForm1::Button1Click(TObject *Sender){
  9. if(!OpenDialog1->Execute())return;
  10. EnterData in;
  11. Edit1->Text = in.FileInput(OpenDialog1->FileName);
  12. }
1
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36
09.03.2009, 14:22  [ТС]
WooDooMan, программа запускается, но при нажатии на кнопку Button1, выскакивает ошибко, причем указывает на строку Res = list->Text
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.03.2009, 22:19
а что за ошибка? напиши текст ошибки
0
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36
10.03.2009, 18:12  [ТС]
В-общем, делал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class EnterData
{
public:
TOpenDialog *OpenDialog1;
TEdit *Edit1;
TRadioButton *RadioButton1;
ProgrammingInput();
void FileInput()
        {
                if (!OpenDialog1->Execute()) return;
                TStringList *list = new TStringList;
                list->LoadFromFile(OpenDialog1->FileName);
                Edit1->Text = list->Strings[0];
                delete list;
        }
};
//потом по Button1Click:
EnterData in;
in.FileInput();
Вот ошибка по нажатию кнопки
http://img.ucoz.ru/_ph/1/866503868.jpg

Пробовал разные вариации кода, предложенные в теме, ошибка все время либо эта, либо 'cannot open file' -_-

Буду очень надеяться на помощь.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.03.2009, 18:33
TOpenDialog *OpenDialog1; TEdit *Edit1; TRadioButton *RadioButton1; - ты объявил, но не создал, ты обращаешься к NULL

размести эти компоненты на окне, а в классе сделай так, как я тебе в примере писал... и что там у меня за ошибка была?
0
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36
10.03.2009, 18:41  [ТС]
Цитата Сообщение от WooDooMan Посмотреть сообщение
TOpenDialog *OpenDialog1; TEdit *Edit1; TRadioButton *RadioButton1; - ты объявил, но не создал, ты обращаешься к NULL
что значит не создал? Разместить на окне? Т.е. в форме? Если так, то это явно из разряда бреда, ибо, как я уже говорил, весь этот код прекрасно работает, если делать не функцией, а просто по событию Button1Click


Цитата Сообщение от WooDooMan Посмотреть сообщение
и что там у меня за ошибка была?
сейчас гляну.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.03.2009, 18:43
mrtman, у тебя код работает, когда на форме есть компоненты, они создаются при создании окна автоматом, а если ты их выносишь в свой класс, создавать надо, а как ты хотел, можешь трассирнуть свой код и глянуть, что хранится в этих указателях
0
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36
10.03.2009, 18:47  [ТС]
WooDooMan, хмм. Очень странная ситуация, видимо ранее я где-то напортачил с Вашим вариантом кода. Ибо сейчас.. Он работает.
Всего один недочет - функция считывает строку из файла, добавляет ее в Edit1, и в конце приписывает || [эти две черты не скопированы, при копировании просто вставляется перенос как будто]. То есть Edit1->Text выглядит как 1 8 6 4 3 6||
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.03.2009, 18:56
mrtman, так оно и есть, свойство Text содержит строки + \r\n, но их достаточно просто выкосить
0
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36
10.03.2009, 19:10  [ТС]
WooDooMan, я Вам очень благодарен за помощь. Огромное спасибо.
Но я все-таки чувствую себя дубом в вопросе классов. Просто их не понимаю. Мне нужно сделать еще 3 класса из вполне работающей проги. Я думал, что понял "тему", так сказать.. пока не попробовал сделать совсем простенькую функцию в том же классе:

C++
1
2
3
4
5
6
7
int Choose(rdb)
        {
                if (RadioButton1->Checked==true) rdb=1;
                if (RadioButton2->Checked==true) rdb=2;
                if (RadioButton3->Checked==true) rdb=3;
                return rdb; 
        }
И далее в коде:
C++
1
2
EnterData ch;
rdb=ch.Choose(rdb);
Здесь пробовал и без присваивания, и функцию не int, а void без всяких параметров. Но в любом случае ошибка, похожая на предыдущую. По дебагу - вылетает именно на вызове функции. *WALL* вбейте в меня пожалуйста, как правильно работать с классами и функциями, ибо читаю учебники - везде одно и тоже, и очень сухим языком(
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.03.2009, 19:13
если тебе так надо в стороннем классе обрабатывать реакции в окне (хотя чем тебе класс окна не класс?), то можно, например, объявить переменные типа TRadioButton в классе твоем, а потом в функцию передавать в качестве параметров указатели на радиобатоны из формы
0
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36
10.03.2009, 19:17  [ТС]
Цитата Сообщение от WooDooMan Посмотреть сообщение
если тебе так надо в стороннем классе обрабатывать реакции в окне
я понимаю, что эт очень глупо, но против преподов не попрешь :/

Цитата Сообщение от WooDooMan Посмотреть сообщение
объявить переменные типа TRadioButton в классе твоем, а потом в функцию передавать в качестве параметров указатели на радиобатоны из формы
примерно так?
C++
1
2
3
4
5
6
7
8
9
class EnterData
{
public:
TOpenDialog *OpenDialog1;
TEdit *Edit1;
TRadioButton *RadioButton1;
TRadioButton *RadioButton2;
TRadioButton *RadioButton3;
//ну и далее функция и все такое
то бишь, описание функции не меняется..погодите, какого тогда типа должна быть функция?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2009, 19:17
Помогаю со студенческими работами здесь

Нужна курсовая работа в с++ в виде консоли или бд в билдере
ребята,нужна курсовая работа в с++ в виде консоли или бд в билдере помогите кому нетрудно!! пожалуйста!!

В билдере есть функции для работы с деревьями?
Собственно нужны функции для работы со списком типа: param1 = value1 param2 = value2 который состоит из большого числа элементов,...

Работа с классами
Для практики на c++, делаю небольшую игрушку. Возникла проблема с присваиванием класса. // RPG___ForCyberForum.cpp: определяет точку...

Работа с классами.
Или это задача такая лёгкая (на экзамене будет), или я чего-то не понимаю. В классе Pair может содержаться только 2 числа (ну и 2 метода не...

Работа с классами
Здравствуйте, я здесь первый раз, если что извините, за неккоректность, ввода или задания вопроса Я написал (например): class Figure...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru