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

Объявление и определение глобального массива структур. Доступ к нему из любого cpp. Как?

09.01.2016, 17:27. Показов 752. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такая тема. Есть файл

BazaOfProgram.h
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
struct DatSob
{
int year;  // Год события
int month; // Месяц события
int day;   // день события
int hors;  // час события
int mins;  // минуты события
 
int sizeX;  // Ширина окна
int sizeY;  // Высота окна
int posX;   // позиция окна  по горизонтале
int posY;   // Ширина окна  по вертикале
 
 
int year2;  // Год напоминания события - Не используется пока.
int month2; // Месяц напоминания события
int day2;   // день напоминания события
int hors2;  // час напоминания события
int mins2;  // минуты напоминания события
 
unsigned char everychar; // Галка учитывания года. (вкл/выкл)
 
unsigned char onpoint; // Галка дополнительного оповещения. (вкл/выкл)
int hors3;             // Час напоминания события (вторично за день)
int mins3;              // Минуты напоминания события (вторично за день)
 
AnsiString line1;   // Имя события
AnsiString line2;   // 1-ая строка сообщения
AnsiString line3;   // 2-ая строка сообщения
AnsiString line4;   // 3-ая строка сообщения
} mas[500];    // Объявление массива на 500 событий.
 
//DatSob DataBase[500];
int  chislitems; //количество событий (строк) счетчик
int indx; // Индекс (номер) объекта.
Есть 2 формы. В каждой из которых есть кнопки. Работаем с listbox. и обычной строкой воода. 2 файла cpp. Мне нужно обмениваться данными так. как будто всё написано в 1 файле и объявлено глобально.
Как реализовать... Выкладываю остальные исходники:

unit 1.cpp

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#include "Unit1.h"
#include "BazaOfProgram.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CCALENDR"
#pragma link "trayicon"
#pragma link "CSPIN"
#pragma resource "*.dfm"
TFormMain *FormMain;
//---------------------------------------------------------------------------
 
__fastcall TFormMain::TFormMain(TComponent* Owner)
        : TForm(Owner)
{
 
 
}
//---------------------------------------------------------------------------
 
 
 
 // Эксперементальная кнопка.--------------получение дат и перевод их в форму-------------------------------------------
 void __fastcall TFormMain::SpeedButton4Click(TObject *Sender)
{
  MonthCalendar1->Date=Date(); // В календаре – текущая дата.
                               // dd.mm.yyyy
  DayOfWeekLabel->Caption=FormatDateTime("dd", Date());
  CSpinEdit7->Value=StrToInt(DayOfWeekLabel->Caption);
}
 
 
//Функция добавления нового объекта в массив---------------------------------------------------------------------------
void __fastcall TFormMain::SpeedButton1Click(TObject *Sender)
{
 
      FormMain->Action;
    NewElement->Edit1->Text="";
 
    NewElement->Left=FormMain->Left+50;
    NewElement->Top=FormMain->Top+50;
 
    FormMain->Enabled=false;
              
 
     //--
}
 
 
//Выделение объекта в списке событий listbox1. Выбор события-----------------
void __fastcall TFormMain::ListBox1Click(TObject *Sender)
{
 
 
         // определение номера
        indx               = ListBox1->ItemIndex; //          ListBox1->ItemIndex - Номер обекта выделеный в поле ListBox1
        Edit4->Text        = mas[indx].line1;
 
 
        GroupBox2->Caption = "Настройки - "+mas[indx].line1;
        
 
 
 
        L_____15->Caption="Номер соб. - "+IntToStr(indx);
}
//---------------------------------------------------------------------------
 
 
void __fastcall TFormMain::SpeedButton5Click(TObject *Sender)
{
 
        //
        mas[indx].line1=Edit4->Text;
        GroupBox2->Caption = "Настройки - "+mas[indx].line1;
 
        if  (Edit4->Text==mas[indx].line1) { SpeedButton1->Enabled=false; }
 
      // изменение данных в ListBox1 ==================================
 
         ListBox1->Items->Strings[indx] =  mas[indx].line1;
 
      //===========================
 
 
}

unit 2.cpp

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
57
58
59
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#include "Unit1.h"
#include "BazaOfProgram.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TNewElement *NewElement;
//---------------------------------------------------------------------------
__fastcall TNewElement::TNewElement(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TNewElement::SpeedButton1Click(TObject *Sender)
{
   // Ввод данных в массив при  ==================================
      if (Edit1->Text!="")
      {
 
      mas[chislitems].line1=Edit1->Text; //Добавление нового события в массив данных.
 
 
      chislitems++;   //Перевод счетчика на 1. (переход к следующему событию)
      FormMain->La_______l13->Caption = chislitems;
 
       }
 
      // Вывод данных в ListBox1 ==================================
        FormMain->ListBox1->Clear();
                for (int i=0; i<chislitems; i++ )
                   {
                      FormMain->ListBox1->Items->Add(mas[i].line1);    //Добавление нового элемента в листбокс. Цикл до 500 событий.
                   }
 
      //===========================
 
      NewElement->Left=-2000;
      FormMain->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TNewElement::SpeedButton2Click(TObject *Sender)
{
    NewElement->Left=-2000;
    FormMain->Enabled=true;
 
}
//---------------------------------------------------------------------------
 
 
void __fastcall TNewElement::FormCreate(TObject *Sender)
{
NewElement->Left=-2000;        
}
//---------------------------------------------------------------------------
Суть проблемы заключается в том, что все эти переменные создаются локально внутри своего файла. А мне нужно, чтобы я ими жонглировал (изменял и получал) из любого своего cpp файла.
В другом разделе мне помочь не смогли. Отправили сюда.=) Поэтому! О! Программисты=)! Вся надежда на вас. Надеюсь вы укажите мне путь ;-)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2016, 17:27
Ответы с готовыми решениями:

Объявление и определение глобального массива структуры
Есть структура struct DatSob { int year; // Год события int month; // Месяц события int day; // день события...

Создание класса, его объявление и доступ к нему
Здравствуйте! Простите, если пишу не в тот раздел. Решил на досуге попрограмировать и вот дошел до того, что назрела необходимость в...

Мешает ли разделение кода на объявление (.h) и определение (.cpp) inline оптимизации?
Читал что когда включают хедер но не реализацию в единицу трансляции, это мешает компилятору инлайнить функции/методы ввиду того что...

2
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
09.01.2016, 17:37
Ну так вроде все и должно работать

C++
1
2
AnsString str = mas[1].line1;
mas[1].line1 = "1 Строка";
Или что не так?
0
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 69
09.01.2016, 18:18  [ТС]
не совсем... Если я начинаю изменять данные из другой формы или добавлять из другой формы - я получаю кукиш=)

Щас поясню:

Добавляю экспериментальную кнопку по добавлению данных в массив из другой формы. и смотрю на количество элементов в листбоксе. Допустим... их стало 6. Потом.... добавляю из первой формы новый элемент. Как их количество, почему-то, становится не 7, а 1?

Да... и заметно... Что при выборе элемента из листбокс - его имя не передается. Т.е. массив создается внутри каждого файла свой, автономный. Никак не связанный с другими такими же массивами, которые создались внутри других форм.

Добавлено через 33 минуты
Проблема решена. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2016, 18:18
Помогаю со студенческими работами здесь

Объявление глобального массива (размерности и элементы известны заранее)
Столкнулся с такой задачей: есть два массива real по 10 элементов каждый. И они будут использоваться во вложенных подпрограммах...

Объявление глобального объекта класса
Есть RecTrans.h #include &quot;StdAfx.h&quot; #pragma once using namespace System; public value class RecTrans { private: String^ ...

Объявление глобального указателя всего проекта
Здравствуйте! Программа состоит из нескольких модулей. В одном из модулей написан класс, объект которого используется в других модулях. Как...

Объявление/инициализация/финализация динамического массива структур с другими динамическими массивами
В общем нужен динамический массив ссылок на struct, в которых содержатся ссылки на другие динамические массивы численных типов. В...

Доступ к элементу массива структур
Есть массив из 6-ти структур. Нужно выбрать по возрасту самого старшего сотрудника и вывести его данные в MessageBox. Как это реализовать я...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru