Консультация № 75534
13.02.2007, 14:05
0.00 руб.
0 3 3
Здравствуйте.

У меня 2 вопроса:
1) Как в Builder C++ 6.0 сделать глобальную переменную ?
Почему то не видны =( , где их обьявлть ? в одной форме виден массив струтур и я в него ввожу данные, а в другой виден но не выводится информация , точнее ее там какбудто нет , ка будто два разных массива структур
struct voditel {
AnsiString fio; //
int numtab; //
AnsiString staj ; //
AnsiString birthday; //
AnsiString addres; //
AnsiString telefon; //
int pusto; //
};
voditel vodmass[100]; //

мне нужно чтоб массивом структур можно было пользоваться во всех формах.

2) Использование компонента StringGrid .
у меня нет описания этого компонента.
Как мне использоватьэтот компонет для отображения массива струтур ?
или может другой компонент лучше использовать?

Обсуждение

Неизвестный
13.02.2007, 14:54
общий
это ответ
Здравствуйте, Demidov Roman Igorevich /rid!
По первому вопросу. Предлагаю следующую структуру файлов:
Unit3.h - определение структуры voditel (возможно других вспомогательных структур)
Unit3.cpp - определение переменных типа структур из вайла Unit3.h

Содержимое файлов в приложении.

В остальных фалах проекта, где необходимо использование переменных, включать файл Unit3.h.

(Подсмотренно у самого билдера)

По второму вопросу.
Обращаться к ячейкам StringGrid‘а можно следующим образом
StringGrid1->Cells[i][j] , где i-номер столбца, j-номер строки (целые числа, индексация с нуля).
Тип данных в данных случае AnsiString

Приложение:
//Файл Unit3.cpp#pragma hdrstop#include "Unit3.h"#pragma package(smart_init)voditel vodmass[100];//Файл Unit3.h#ifndef Unit3H#define Unit3H#include <Classes.hpp>struct voditel {AnsiString fio;int numtab;AnsiString staj ;AnsiString birthday;AnsiString addres;AnsiString telefon;int pusto;};extern voditel vodmass[100];#endif
Неизвестный
13.02.2007, 21:23
общий
это ответ
Здравствуйте, Demidov Roman Igorevich /rid!
Значит это два разных массива (ведь разные формы
принадлежат разным классам), либо это глюк среды
разработки Билдера (хотя это маловероятно).
Глобальные перменные нужно объявлять вне классов форм.
Желательно в хитерах. Код бы глянуть. А так конкретно
сказать сложно.
Удачи!
Неизвестный
13.02.2007, 23:32
общий
это ответ
Здравствуйте, Demidov Roman Igorevich /rid!
в С++ каждый cpp файл компилируется отдельно, поэтому если в каждом ты укажешь, например:
int a;
то каждый obj файл будет содержать свою собственную переменную с именем а (т.е. все функции внутри своего obj/cpp файла будут использовать свою переменную). на этапе линковки линкер выдаст предупреждение, что имеются две переменные с одинаковым именем.
чтобы сделать одну "глобальную" переменную, видимую всем cpp файлам, делают так - в одном единственном cpp файле ее объявляют физически, т.е.
int a;
во всех остальных же пишут:
extern int a;
что означает, что эта переменная определена где-то еще, а уже линкер на этапе линковки найдет ее и подставит нужный адрес.
конструкцию
extern int a;
удобно поместить в h файл, который подключается ко всем cpp.
Форма ответа