[C++] Jak utworzyć tablicę obiektów klasy


(system) #1

Cześć

Piszę sobie program - Egzamin zawodowy etap teoretyczny. Jak nic pasuje mi tu tablica obiektów klasy "pytanie". Sęk w tym że nie bardzo wiem jak się za to zabrać. Znalazłem coś na ten temat jednak również nie bardzo wiem jak sobie z tym poradzić http://binboy.sphere.pl/index.php?show= ... =0&p2=2502 .

Kompilator Borland C++ Builder 6

system Win XP SP3

To moja klasa:

class pytanie

{

private:

  AnsiString pytanie;

  AnsiString odp1;

  AnsiString odp2;

  AnsiString odp3;

  AnsiString odp4;

  int podp;


public:

int idpyt;

void wyswpyt (int);

pytanie::pytanie (AnsiString pyt, AnsiString odpa, AnsiString odpb, AnsiString odpc, AnsiString odpd, int prodp);

};

a to reszta kodu który może się przydać:

//pytanie b ("Pytanie testowe", "odp a", "odp b", "odp c", "odp d", 0);


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

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

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


void __fastcall TForm1::Button2Click(TObject *Sender)

{

Application->Terminate();

}

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



pytanie::pytanie (AnsiString pyt, AnsiString odpa, AnsiString odpb, AnsiString odpc, AnsiString odpd, int prodp)

{

pytanie=pyt;

odp1=odpa;

odp2=odpb;

odp3=odpc;

odp4=odpd;

podp=prodp;

}




void pytanie::wyswpyt (int nrpyt)

{

Form2->Memo2->Lines->Add("próba");

Form2->RadioGroup1->Items->Clear();

Form2->RadioGroup1->Items->Add(odp1);

Form2->RadioGroup1->Items->Add(odp2);

Form2->RadioGroup1->Items->Add(odp3);

Form2->RadioGroup1->Items->Add(odp4);


}



int lnumer (int a)

{

int c=random(49-a);

Form2->Memo1->Lines->Delete(c);

return c;

}






void __fastcall TForm1::Button1Click(TObject *Sender)

{

int a=StrToFloat(MaskEdit1->Text);

//int b=a^453789148;



if (Edit2->Text!=(a^453789148))

        {

        for (int i=0;i!=50;i++)

                {

                Form2->Memo1->Lines->Add(IntToStr(i));

                }


        Randomize();


        for (int i=0;i!=50;i++)

                {

                int idpytania=lnumer(i);

                pytanie b[i] ("Pytanie testowe", "odp a", "odp b", "odp c", "odp d", 0);





                    pytanie[i].liczba1=losowa.Next(100);


                }




        Form2->Timer1->Enabled=True;

        b.wyswpyt(0);

        Form2->ShowModal();

        Form1->Close();

        }


else Application->Terminate();

}

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

Mam świadomość że kod jest raczej niskiej jakości, jednak dopiero się uczę, a program jest wciąż w fazie tworzenia :slight_smile: . Byłbym wdzięczny za wskazówki jak się do tego zabrać ...


(Grzegorz Kwiatek) #2

Ojej. Nie wiem po co wkleiłeś kod - nic z niego nie wynika. Klasa to klasa, a zadajesz w tytule przecież generalne pytanie, więc nie wiem po co ten kod. Tablicę obiektów klasy tworzy się tak samo jak zwykłą tablicę, czyli np. NazwaKlasy ObiektKlasy[10]. W dużej ilości przypadków tablicę taką robi się dynamicznie operatorem new (nie zapominając o jej usunięciu na końcu!)


(system) #3

W przyklejonym temacie pisać żeby podawać kod - profilaktycznie wkleiłem cały :slight_smile: . problem rozwiązałem nieco inaczej

const int ilepyt=50;

pytanie p[ilepyt];

gdyż wcześniej wywalało pewne problemy. Teraz mam problem gdyż za chiny ludowe nie mogę wywołać funkcji znajdującej się na formie1 z forma2.Funkcję wywołuję "Form1->wyswpyt(a);" Dokleiłem na początku" #include "Unit1.h"", jednak kompilator wywala

[C++ Error] Unit2.cpp(62): E2316 'wyswpyt' is not a member of 'TForm1'

Jak sobie z tym poradzić ?


(Somekindsoftware) #4

Jak będziesz miał problem z Windowsem, to wklej cały jego kod - na pewno pomoże :smiley:

To jest funkcja statyczna?


(system) #5

@somekind ale to raczej nielegalne, poza tym wiele osób było by z tego bardzo szczęśliwych :stuck_out_tongue:

Tak. Funkcja statyczna. dodałem jej nagłówek do deklaracji Form1, a do nagłówek funkcji samej funkcji musiałem tak przerobić:

void TForm1::wyswpyt (int nrpyt)

Temat do zamknięcia