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

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

30.06.2013, 21:39. Показов 3115. Ответов 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
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
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
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
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
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
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
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru