С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 3
Регистрация: 14.04.2013
Сообщений: 34

Глобальный динамический массив

30.06.2013, 21:39. Показов 3111. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в общем делаю одно задание в котором нужно создать некий динамический массив классов ну и далее работать с ними, при этом нужно использовать формы.
класс создается при нажатии на кнопку
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
iCount = StrToInt(InputBox("Количество элементов","Введите количество элементов",""));
Student *a =  new Student[iCount];
Label1->Caption="Элемент 1 из"+IntToStr(iCount);
Label2->Caption="Заполните все поля";
}
но беда в том, что этот класс (а точней их массив) виден лишь внутри этой обработки нажатия кнопки. А как объявить массив так, чтоб он был виден глобально?(static пробовал - не помогает)
навсякий случай весь текст программы под спойлером
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
int iCount=0;
int iCurrentPos=0;
class Student
{
    public:
    Student() : sName_(NULL), iYear_(0), bDebt_(true) {}
    Student(String sName, int iYear, bool bDebt) : sName_(sName), iYear_(iYear),bDebt_(bDebt)  {}
    void Set()
    {
        sName_=Form1->Edit1->Text;
        iYear_=StrToInt(Form1->Edit2->Text);
        if (Form1->ComboBox1->Text=="Есть") bDebt_=true;
        if (Form1->ComboBox1->Text=="Нет") bDebt_=false;
 
    }
    private:
    String sName_; int iYear_; bool bDebt_;
};
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
iCount = StrToInt(InputBox("Количество элементов","Введите количество элементов",""));
 static Student *a =  new Student[iCount];
Label1->Caption="Элемент 1 из"+IntToStr(iCount);
Label2->Caption="Заполните все поля";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (iCurrentPos==0) iCurrentPos++;
 
if (Edit1->Text!="Фамилия" && Edit1->Text!="" && Edit2->Text!="Курс" && Edit2->Text!="")
{
iCurrentPos++;
a[iCurrentPos].Set();
Label1->Caption="!";
}
else
Label2->Font->Color=clRed;
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.06.2013, 21:39
Ответы с готовыми решениями:

Глобальный динамический массив
В общем проблема вот в чем, пытаюсь сделать глобальный динамический массив структур но что-то идет не так. Странная ошибка с...

Глобальный динамический двумерный массив
Вообще то задача на Си, но в разделе мало людей, поэтому пишу тут, помогите пожалуйста. Вообщем есть задача считать файл в функции init(),...

Поместить числа из файла в глобальный целочисленный динамический массив
Здравствуйте! На днях начал изучать qt. Столкнулся со следующей задачей. У меня есть файл с N-ым количеством чисел ( числа разделены...

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
30.06.2013, 21:48
Опиши в Unit1.h
C++
1
2
// Сюда перенеси описание класса Student
extern Student *a;
, а в Unit1.cpp -

C++
1
2
Student *a; // Добавь вот эту строку...
TForm1 *Form1;
Тогда переменная a будет доступна везде, куда при-Include-ен файл Unit1.h... То есть, схема та же самая, по которой сам Билдер описывает переменную Form1
1
1 / 1 / 3
Регистрация: 14.04.2013
Сообщений: 34
30.06.2013, 21:55  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
...
появились declaration Syntax Error
в unit1.h
C++
1
2
3
4
5
6
7
...
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
extern Student *a;
и везде где упомянут мой массив а
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
30.06.2013, 21:57
Описание класса где осталось? Оно должно быть тоже в h-файле...
0
1 / 1 / 3
Регистрация: 14.04.2013
Сообщений: 34
30.06.2013, 22:22  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Описание класса где осталось? Оно должно быть тоже в h-файле...
да, заметил вашу правку, сейчас переделываю.

Добавлено через 22 минуты
новая беда при попытке вызова функции Set(); получаю ошибку "access violation"
(описание класса)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Student
{
    public:
    Student() : sName_(NULL), iYear_(0), bDebt_(true) {}
    Student(String sName, int iYear, bool bDebt) : sName_(sName), iYear_(iYear),bDebt_(bDebt)  {}
    void Set()
    {
        sName_=Form1->Edit1->Text;
        iYear_=StrToInt(Form1->Edit2->Text);
        if (Form1->ComboBox1->Text=="Есть") bDebt_=true;
        if (Form1->ComboBox1->Text=="Нет") bDebt_=false;
 
    }
    private:
    String sName_; int iYear_; bool bDebt_;
};
(обращение к функции)
C++
1
2
3
4
5
6
7
8
9
10
if (iCurrentPos==0) iCurrentPos++;
 
if (Edit1->Text!="Фамилия" && Edit1->Text!="" && Edit2->Text!="Курс" && Edit2->Text!="")
{
 
Label1->Caption=IntToStr(iCurrentPos);
a[iCurrentPos].Set();
Label1->Caption="Элемент"+IntToStr(iCurrentPos)+" из "+IntToStr(iCount);
iCurrentPos++;
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
01.07.2013, 00:26
Во-первых, я бы вынес реализацию Set() в CPP-файл, и вообще избавился бы от упоминания Form1 в методах класса Student:
C++
1
2
3
4
5
6
    void Student::Set(String AName, int AYear, bool ADebt)
    {
        sName_=AName;
        iYear_=AYear;
        bDebt_ = ADebt;
    }
Но и без этого код работает. AV не возникает (если только в Edit будет не представление целого числа - тогда, разумеется, будет AV)... Что-то еще в коде не так, делай минимальный тестовый проект, воспроизводящий проблему, и присоединяй его архивом...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.07.2013, 00:26
Помогаю со студенческими работами здесь

Построение динамического массива в функции и его перевод в глобальный динамический массив
Здравствуйте, моя проблема заключается в передаче построеного в функции динамического массива fdarray в глобальный динамический массив...

Динамический глобальный объект.
Здравствуйте. Пишу Auto-Clicker . Текущая версия содержит заранее созданный массив объектов класса &quot;TClickBase&quot; в каждом объекте...

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив, причем использовал класс-наследник от...

Как сделать из статического массива, одномерный динамический массив и двумерный динамический массив
По условию: &quot;Дана прямоугольная матрица размера A × B. Найти строки с наибольшей и наименьшей суммой элементов. Вывести на печать найденные...

Динамический массив ,элементами которого являются объекты класса динамический массив
Доброго времени суток, захотел создать динамический массив ,элементами которого являются объекты класса динамический массив, если...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru