Problem jest prosty - zminne z globalnej struktury nie przekazują parametrów do funkcji (klasy). Są 4 pliki, Unit1.cpp/h raz Unt2.cpp/h
KOD cpp: UKRYJ
//Unit1.h
// Globalna zmienna, więc bezpośrednio w pliku nagłówka
struct SParametry
{
double x_min_real,
x_max_real,
y_min_real,
y_max_real;
};
SParametry Param;
// Globalna zmienna, więc bezpośrednio w pliku nagłówka
struct SParametry
{
double x_min_real,
x_max_real,
y_min_real,
y_max_real;
};
SParametry Param;
Gdzieś w programie (Unit1.cpp) zmienne w strukturze są obliczane, przyjmijmy, że tak:
KOD cpp: UKRYJ
//Unit1.Cpp, gdzieś w jakieś fukcji
Param.x_min_real=1;
Param.x_max=2;
Param.y_min_real=3;
Param.y_max_real=4;
Param.x_min_real=1;
Param.x_max=2;
Param.y_min_real=3;
Param.y_max_real=4;
Plik nagłowka 2-go Unita
KOD cpp: UKRYJ
//Unit2.h
#Include "Unit1.h"
#Include "Unit1.h"
A gdzieś w programie jest takie coś - dla Unit2.cpp:
KOD cpp: UKRYJ
//Unit2.cpp
TSkala_new :: TSkala_new( int xe0, int ye0,
int eszer, int ewys,
double xr0, double yr0,
double rszer, double rwys)
{
A = (double)eszer / rszer;
B = (double) xe0 - A * (xr0 - rszer / 2.);
C = -(double)ewys / rwys;
D = (double) ye0 - C * (yr0 + rwys / 2.);
E = rszer / (double)eszer;
F = xr0 - rszer / 2. - E * (double)xe0;
G = -rwys / (double)ewys;
H = yr0 + rwys / 2. - G * (double)ye0;
}
int TSkala_new:: daj_ekr_x( double xr)
{
return A * xr + B;
}
int TSkala_new :: daj_ekr_y( double yr)
{
return C * yr + D;
}
double TSkala_new :: daj_real_x( int xe)
{
return E * xe + F;
}
double TSkala_new::daj_real_y( int ye)
{
return G * ye + H;
}
....
....
//Gdzieś w funkcji przycisku
short ramka=10;
Graphics::TBitmap *bmp_nody;
bmp_nody = new Graphics::TBitmap;
bmp_nody->Width =Image1->Width;
bmp_nody->Height =Image1->Height;
TSkala_new biegunowa(ramka,ramka,bmp_nody->Width-2*ramka,bmp_nody->Height-2*ramka,(Param.x_max_real+Param.x_min_real)/2,(Param.y_max_real+Param.y_min_real)/2,(Param.x_max_real-Param.x_min_real),Param.y_max_real-Param.y_min_real);
TSkala_new :: TSkala_new( int xe0, int ye0,
int eszer, int ewys,
double xr0, double yr0,
double rszer, double rwys)
{
A = (double)eszer / rszer;
B = (double) xe0 - A * (xr0 - rszer / 2.);
C = -(double)ewys / rwys;
D = (double) ye0 - C * (yr0 + rwys / 2.);
E = rszer / (double)eszer;
F = xr0 - rszer / 2. - E * (double)xe0;
G = -rwys / (double)ewys;
H = yr0 + rwys / 2. - G * (double)ye0;
}
int TSkala_new:: daj_ekr_x( double xr)
{
return A * xr + B;
}
int TSkala_new :: daj_ekr_y( double yr)
{
return C * yr + D;
}
double TSkala_new :: daj_real_x( int xe)
{
return E * xe + F;
}
double TSkala_new::daj_real_y( int ye)
{
return G * ye + H;
}
....
....
//Gdzieś w funkcji przycisku
short ramka=10;
Graphics::TBitmap *bmp_nody;
bmp_nody = new Graphics::TBitmap;
bmp_nody->Width =Image1->Width;
bmp_nody->Height =Image1->Height;
TSkala_new biegunowa(ramka,ramka,bmp_nody->Width-2*ramka,bmp_nody->Height-2*ramka,(Param.x_max_real+Param.x_min_real)/2,(Param.y_max_real+Param.y_min_real)/2,(Param.x_max_real-Param.x_min_real),Param.y_max_real-Param.y_min_real);
I co się dziej - w clasie/funkcji TSkala_new dostaję dzielenie przez 0. Podczas debugowania (F7/F8) jak najadę myszką na wartości "x/y real max/min" to są różne od zera i w dodatku takie, że po dokonaniu obliczeń ostatnie 4 parametry są różne od zera. Ale będąc na ostatniej linii podczas debugowania i dając F7 przechodzę do funkcji TSkala_new i co - ostatnie 4 paraemtry są równe 0 - tak przekazał parametry program - dlaczego?






