PL_Andrev Temat założony przez niniejszego użytkownika |
Pobranie n-danych z obiektu do main() » 2016-12-07 14:16:26 Witam, Napisałem mały programik do wyciągania danych z obiektu. O ile wyciągniecie 1 konkretnej wartości nie jest problemem (w przykładzie Get_min), do nie jestem w stanie poradzić sobie z metodą zwracającą dwie(lub więcej) wartości według zadanego klucza zmiennych. #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" #include <iostream> class Klasa { int amin, amax, adelta; public: void Set( int a_min, int a_max, int a_del ); int Get_min(); void Get_two( int a, int b ); };
void Klasa::Set( int a_min, int a_max, int a_del ) { amin = a_min; amax = a_max; adelta = a_del; }
int Klasa::Get_min() { return amin; }
void Klasa::Get_two( int a, int b ) { a = amin; b = amax; }
TForm1 * Form1;
__fastcall TForm1::TForm1( TComponent * Owner ) : TForm( Owner ) { Klasa k; k.Set( 15, 100, 0 ); int a = k.Get_min(); ShowMessage( IntToStr( a ) ); k.Get_two( int a, int b ); ShowMessage( IntToStr( a ) + " = " IntToStr( b ) ); }
Problem: O ile funkcja Get_min działa, to "nieeleganckie" byłoby przygotowanie ilości n metod Get_cośtam do wywołania pojedynczych zmiennych. Gdzie zatem jest błąd w powyższym przykładzie metody Get_two ? |
|
mateczek |
» 2016-12-07 14:18:33 Swoją drogą dlaczego robisz okienka, skoro piszesz programy konsolowe ?? a konstruktor traktujesz jak funkcję main?? void Klasa::Get_two( int & a, int & b ) { a = amin; b = amax; } |
|
PL_Andrev Temat założony przez niniejszego użytkownika |
» 2016-12-07 15:05:43 Nie działa, dalej jest expression syntax.
|
|
mateczek |
» 2016-12-07 15:13:24 No nie działa bo jest jescze jeden błąd !!!! __fastcall TForm1::TForm1( TComponent * Owner ) : TForm( Owner ) { int a, b; k.Get_two( a, b ); }
|
|
PL_Andrev Temat założony przez niniejszego użytkownika |
» 2016-12-07 15:42:09 Teraz działa - dzięki!
Co do twojego pytania - tak w ogóle jestem "noob" w C++ i świeżo co przesiadłem się z VB.NET. W sieci (np. na tej stronie) są kursy C++ ale konsolowe - robię je pod okienkami bo przy okazji uczę się obsługi tychże okienek (powiązanie z klasami).
|
|
PL_Andrev Temat założony przez niniejszego użytkownika |
» 2016-12-07 22:25:09 Podzieliłem powyższy program na trzy części: 1) plik z klasą i funkcjami obsługującymi klasy; 2) plik główny Klasa k1; generate();
int q1, q2; k1.Get_two( q1, q2 );
3) funkcja startowa, która dla testów będzie budowała po jednym obiekcie z każdej klasy składającym się z kilkudziesięciu zmiennych - funkcja main() na tej podstawie opracuje okienkowy wynik dla budowania graficznej interpretacji zależności klasaA(obiektA)<->klasaB(obiektB). void generate() { ShowMessage( "odpalam generator obiektow" ); int x1 = 15; int y1 = 100; int z1 = 0; Klasa k1; k1.Set( x1, y1, z1 );
Jak wyżej wspomniałem - obiekty docelowo będą miały po kilkadziesiąt zmiennych, więc do celów testowych uruchamiam je z zewnętrznej funkcji z wartościami domyślnymi. Problem: Dopóki funkcja generate() znajduje się w main() wszystko działa poprawnie. Jeżeli natomiast znajduje się w osobnym pliku, to wiadomość kontrolna jest wyświetlana, ale wywołanie danych obiektu z main() funkcją k1.Get_two() daje wartości "śmieciowe", niezgodne z wcześniej zadeklarowanymi w funkcji generate(). |
|
mateczek |
» 2016-12-08 00:34:09 To nie ma prawa działać. Nic co jest "tworzone " w funkcji generate(), nie ma prawa wyjść poza tą funkcję !!! |
|
« 1 » |