Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 00:43   #1
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию проблема с глобальной переменной в C++ Builder

с такой вот проблемой столкнулся... из одной функции глобальная переменная не передается в другой модуль...

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdlib.h>
#include <stdio.h>
#include <fstream.h>
#include <string.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 using namespace std;
TForm1 *Form1;
const int x=118;
TButton *mass[x];
int el;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  el = 5;  //то значение передается





}
//---------------------------------------------------------------------------

void __fastcall TForm1::massClick(TObject *Sender)
{
 TButton *ptButton;
 ptButton=(TButton*) Sender ;
 Label1->Caption = ptButton->Caption;
 el = ptButton->Tag;
 //**** чтение из файла *****

char FileName[30], line[30];
strcpy( FileName ,( char*)("element\\"));
strcat(FileName,IntToStr(ptButton->Tag).c_str() );
strcat(FileName,".txt" );
Label3->Caption = FileName;
 ifstream P(FileName);

 P.getline(line, sizeof(line));
 Label2->Caption = line;
 strlen(line);
 P.close();



 //**************************
 el = ptButton->Tag;   // это значение не передается глобально
 Label1->Caption = IntToStr(el);
 Form2->Show();

}
//---------------------------------------------------------------------------




void __fastcall TForm1::FormCreate(TObject *Sender)
{ el = 10; // это значение передается
  

    for( int i = 0; i < x; ++i )
{
mass[i] = new TButton(this);
mass[i]->Parent = Form1;
mass[i]->Width = 50;
mass[i]->Height = 50;
mass[i]->Tag = i+1;
mass[i]->OnClick = massClick;
mass[i]->Caption = IntToStr(i+1)+ "  \n  ";
mass[i]->Cursor = crHandPoint;
mass[i]->Font->Charset = GREEK_CHARSET;
long NewStyle=GetWindowLong(mass[i]->Handle,GWL_STYLE);
NewStyle|=BS_MULTILINE;
SetWindowLong(mass[i]->Handle,GWL_STYLE,NewStyle);
//********************************
  
  }
}
//---------------------------------------------------------------------------


unit 2

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
#include "el.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;

//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
  Label1->Caption = IntToStr(el);  //передается сюда
}
//---------------------------------------------------------------------------
el.h
Код:
extern int el;

как сделать что бы значение el = ptButton->Tag; тоже передавалось в другие модули...
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 29.05.2011 в 01:17.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 29.05.2011, 05:48   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

последовательность выполнения:
1) TForm1::TForm1()
2) TForm1::FormCreate()
3) TForm2::FormCreate()
4) TForm1::massClick()

чтобы передать хоть что-нибудь из 4) в 3) вам нужна машина времени.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 29.05.2011, 12:24   #3
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
чтобы передать хоть что-нибудь из 4) в 3) вам нужна машина времени.
это сарказм или печальный вывод для меня???
будем изобретать машину времени...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с глобальной переменной HollyPaladin Общие вопросы C/C++ 4 08.10.2010 12:06
Использование глобальной переменной в потоке Шульц Общие вопросы Delphi 12 18.03.2010 20:00
Многопоточность с глобальной переменной Шульц Общие вопросы Delphi 1 30.01.2010 18:19
Объявление глобальной переменной Grom48 Общие вопросы Delphi 3 19.12.2009 22:16
Проблема глобальной переменной Хохматый Microsoft Office Access 1 18.06.2009 13:04