Консультация № 72917
27.01.2007, 21:03
0.00 руб.
0 1 1
Уважаемые эксперты, подскажите, как получить доступ к переменной(массиву MyItem вм.приложение) в C++ Builder, из формы2, если массив был создан до создания формы1

Приложение:
#include <vcl.h>#include <math.h>#pragma hdrstop#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"class items{ public: char name[128] ; int price;};items MyItem[256];int num = 0;int calc_sum(){int sum = 0;for (int i = 1; i<=num; i++) sum = sum + MyItem[i].price;return sum;}TForm1 *Form1;...

Обсуждение

Неизвестный
27.01.2007, 21:33
общий
это ответ
Здравствуйте, Azrr!

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

Замечания по Вашему коду:

1) Описывайте в .h-файлах только те функции, которые Вы хотите сделать общедоступными, и только в виде заголовка, т.е.

int calc_sum();

2) Код этих функций следует писать в .cpp-файлах, и только 1 раз в проекте. Если Вы хотите использовать в .cpp-файле (файл номер 1) функцию, описанную в другом .cpp-файле (файл 2), подключите в файле 1 .h-файл, соответствующий файлу 2, так:

#include "файл_2.h", где файл_2 - имя файла файл_2.cpp

3) Описывайте глобальные переменные в .cpp, а не в .h файлах.
4) В тех .cpp-файлах, в которых вы хотите использовать переменную, описанную в другом файле, в начале пишите:
если переменная объявлена как "items MyItem[256];",
то там, где она нужна, пишите "extern items* MyItem;"

В п. 4 есть альтернатива: если переменная объявлена в Unit1.cpp (где она у Вас по логике и должна быть), тогда строчку с extern можно поместить в Unit1.h, а в Unit2.cpp написать:
#include "Unit1.h"

Пояснения: все переменные, описанные глобально (вне функций) в некотором .cpp - файле, являются статическими и глобальными для данного .cpp-файла.
Ключевое слово extern указывает, что данная переменная для файла является внешней, т.е. описана где-то ещё, а данный файл использует её как внешнюю.

Описания переменных и тела функций не следует лепить в .h-файлы, поскольку при подключении .h-файлов с помощью #include возникнет ошибка, поскольку переменные и функции с одинаковыми именами будут описаны несколько раз в проекте.
Форма ответа