Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 36

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

09.03.2009, 13:37. Показов 7462. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru