Faster |
Отправлено: 22.01.2004, 07:07 |
|
Не зарегистрирован
|
Вобщем суть такая .. мне надо каким либо образом сделать общие переменные, я додумался запихзатьих в отдельный файл и подгружать в каждом модуле или форме, но LINK мне орёт что они объявлены дважды ...
ВОПРОС, что мне делать ? может ли ктонить запихнуть пример как от этого избавится .... или как правельно надо делать !
P.S.ответов типа я ламер не надо ... |
|
Vlad |
Отправлено: 22.01.2004, 09:53 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
делаешь *.H в нем определяешь (и определяешь свои переменные)
#define MY_VAR — ну что-то типа этого,
а в других *.cpp при подлючении пишешь
#ifndef MY_VAR
include <*.h> -свой файл с определениями переменных
#endif
По моему так, должно прокатить. |
|
Bond |
Отправлено: 22.01.2004, 10:58 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 142
|
//unit2.cpp
int a;
//unit2.h
#ifndef UNIT2_H
#define UNIT2_H
extern int a;
#endif
|
|
Faster |
Отправлено: 02.02.2004, 12:08 |
|
Не зарегистрирован
|
ВОТ ТОТО И ОНО ЧТО ЛИНК ВСЁ РАВНОДУЕТСЯ ...
ВОТ ЕЩЁ ПОПРОБУЮ ПО ВТОРОМУ ОТВЕТУ НО ВСЁ РАВНО НЕ ВЕРИТСЯ |
|
Pirs |
Отправлено: 10.02.2004, 00:36 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
Делаешь header файл и объявляешь в нем все свои переменные, НО ОБЯЗАТЕЛЬНО С ПРИСТАВКОЙ EXTERN
Подключай этот файл куда хочешь и сколько хочешь раз, НО В ОДНОМ ИЗ файлов проекта объявляешь точно эти же переменные но без extern.
Внимательно следи что бы объявления в обоих файлах были строго синхронны.
|
|
Zmey |
Отправлено: 10.02.2004, 09:28 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 15
|
Если тебе надо, что бы две формы (т е их модули ) видели одни и те же переменные объяви их в классе одной из форм (Form1 например) как public, обращение к ним из другой формы Form2: Form1->var .....
Глобальные переменные стоит использовать как можно реже, дабы не засорять память процесса.
Выход — запихнуть их в класс как статические поля, т е:
есть глобальные переменные: int num, double avr
тогда -
class Global
{
public static int num;
public static double avr;
}
обращение к ним как Global::num и Global::avr |
|
eugene_sh |
Отправлено: 15.02.2004, 16:35 |
|
Не зарегистрирован
|
Линкер выдает предупреждения, а не ошибки. На них можно не обращать внимания! |
|
** olegenty |
Отправлено: 16.02.2004, 09:14 |
|
Не зарегистрирован
|
если сделать, как написал BOND, всё будет пучком и без сообщений.
А на ворнинги компилятора нельзя не обращать внимания: физически память может быть выделена под несколько одноимённых переменных. замучаешься отлаживать потом. |
|
exp |
Отправлено: 20.02.2004, 01:16 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
пиши
extern PACKAGE double d;
Линкер заткнется.
|
|
Beut |
Отправлено: 20.02.2004, 03:22 |
|
Не зарегистрирован
|
Ну... С классами умеешь работать? Объяви класс и сделай в нём статические поля. А потом их используй |
|
Beut |
Отправлено: 20.02.2004, 03:46 |
|
Не зарегистрирован
|
А вообще в Билдере есть специальная форма для подобного — называется DataModule. И в ней объявляешь необходимые переменные после строки __fastcall
class TDataModule3 : public TDataModule
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TDataModule3(TComponent* Owner);
//Твои переменные
int i;
double d;
};
И теперь работаешь
DataModule3->i = 5;
int t = DataModule3->i;
DataModule3 для удобства можно переименовать, конечно же
И теперь просто подключаешь эту форму ко всем тем формам, в которых тебе нужны будут эти переменные
|
|
exp |
Отправлено: 27.02.2004, 18:06 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Ух- ты. удобно.
|
|