Array mit TImage Objekten als Inhalt



  • Wofür den die Vector Klasse, bin nicht so der erfahrenste in C++?
    Aber erstmal habe ich das folgende Problem:

    ich wollte gerne ein Array erstellen mit 10 TImage Objekten unter Borland C++ Builder 6.

    Leider habe ich keine Ahnung in welchem Format ich das Array anlegen muss, und wie ich das dann gefüllt bekomme.

    Wenn ich das nicht behoben habe, bringt mir die for-Schleife nichts.



  • Die Vector-Klasse bietet dir einen Containertyp, der ähnlich zu gebrauchen ist, wie ein normales C-Array, nur ist es viel flexibler und weniger anfällig für Bufferoverflows, etc.

    Zu deiner Frage:

    Ein Array ist ja ein Gebilde, dessen Elemente alle vom gleichen Typ sind wie das Array selber. Wenn du also Elemente vom Typ "TImage" Abspeichern willst, dann sollte auch deine Array von diesem Typ sein.



  • Berufspenner schrieb:

    Ein Array ist ja ein Gebilde, dessen Elemente alle vom gleichen Typ sind wie das Array selber.

    Naja, das stimmt nicht wirklich. Die Elemente eines Arrays sind nicht vom gleichen Typ wie das Array, sondern vom Typ der Elemente 😃 .

    Du solltest wirklich überlegen, std::vector zu benutzen:

    #include <vector>
    //...
    std::vector<TImage> Image(20) //20 Elemente
    for (int i=1; i<10; i++)
      {
       X = MittelpunktX + cos(i*36) *5;
       Y = MittelpunktX + sin(i*36) *5;
       Image[i].Height = 10;
       Image[i].Width = 10;
       Image[i].Left = X - 5;
       Image[i].Top = Y - 5;
      }
    

    So in etwa...



  • Wie spreche ich den die einzelnen Elemente im Vector an? Denn jetzt habe ich das bei mir wie folgt aussehen:

    #include <vector>
    using namespace std;
    //----
    std::vector<TImage> Image(10); //10 Elemente
    //----
    for (int i=1; i<10; i++)
      {
       vector<TImage>::iterator it = Image.begin();
       X = MittelpunktX + cos(i*36) *5;
       Y = MittelpunktX + sin(i*36) *5;
       Image[i]->Height = 10;
       Image[i]->Width = 10;
       Image[i]->Left = X - 5;
       Image[i]->Top = Y - 5;
      }
    

    Und ich bekomme folgende Fehlermeldung:

    [C++ Fehler] Unit1.cpp(72): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich*

    Und das habe ich doch...



  • Ich habs oben schon reingepostet. . anstatt ->



  • -.- Sollte mir wohl mal ne neuen Brille kaufen



  • Instanzen: operator.
    Zeiger auf Instanzen: operator->



  • TImage muß als Zeiger verwaltet werden. Also besser so

    #include <vector>
    //----
    std::vector<TImage*> Images;
    //----
    for (int i=0; i<10; i++)
      {
       X = MittelpunktX + cos((i+1)*36) *5;
       Y = MittelpunktX + sin((i+1)*36) *5;
       Images.push_back(new TImage(0));
       Images.back()->Height = 10;
       Images.back()->Width = 10;
       Images.back()->Left = X - 5;
       Images.back()->Top = Y - 5;
      }
    

    Die Images im vector müssen zum Schluß auch wieder gelöscht werden.
    In der FAQ des BCB-Forums gibt es zu diesem Thema auch schon Beiträge.



  • *löschen bitte*



  • Siehe mein Beitrag zuvor.
    Am besten wäre es wohl, wenn du deine Fragen bezüglich TImage im BCB-Forum stellst.


Anmelden zum Antworten