Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Глобальное определение переменной


Автор: Mpak 24.6.2007, 01:47
Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

float B1;

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// производяться действия с переменной B1 и в ней меняется значение
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// в этой функции значени переменной B1 не изменилось (т.е. не такое какое стало в функции Button1Click)
}
//---------------------------------------------------------------------------


Раньше вроде помогало определить переменную до определения формы...

Автор: jonie 24.6.2007, 02:44
а Вы уверены что оно не поменялось? Проглядите в дебаггере.. сравните адреса переменных.
Может банальное перекрывание области видимости?
В общем чтобы оно не изменилось быть не может (разве что разные потоки.... и т.п., но не в приведенном коде).

Автор: Mpak 24.6.2007, 09:40
Хорошая идея, гляну...
В этом то и проблема, впредыдущих программах работало, а сейчас ставлю строчку, где изменяется значение B1 в функцию Button2Click все нормально.
А вот так,как описал не получается. 

Гляну, о результатах сообщу.

Добавлено через 11 минут и 29 секунд
Троссировка не помогла....
Цитата(jonie @  24.6.2007,  05:44 Найти цитируемый пост)
Может банальное перекрывание области видимости?

Не много не понял, но смена имени переменной тоже не помогла...
Вот подробный листинг:

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include "func.h"
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

float B1, nn;

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// функция переводящая из градусов в радианы
B1 = GrToRad(StrToFloat(EB1g->Text), StrToFloat(EB1m->Text),StrToFloat(EB1s->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{

nn = er2*pow(cos(B1), 2);

Edit->Text = FloatToStr(nn); 

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


Автор: jonie 24.6.2007, 18:13
проверить значение B1 после строки 25 (вы ее вообще вызываете?), проверить зачение в строке 31.
Сравнить адреса переменных в вышеуказанных строках. 
Вообще должно работать.....
Ну уж если косяк постите проект фигли... больше мыслей нет.

Автор: Mpak 24.6.2007, 18:28
Не знаю почему, честно, но заработало....  smile 

Автор: Rodman 25.6.2007, 10:22
а если в *.h файле объявить?! или теряется смысл???

Автор: Mpak 1.7.2007, 20:01
Все заработало, что было не понял... но заработало smile

Rodman, через extern не помогало smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)