Announcement

Collapse
No announcement yet.

DynamicArray - wie geht das?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DynamicArray - wie geht das?

    Hallo builder,

    schaut doch mal auf folgenden Code bitte:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    // A ist wie folgt deklariert:
    // DynamicArray<TMyEdit *> A;

    TMyEdit *l; // Ist im deklariert
    // u. von TEdit abgeleitet
    int i,j;

    A.Length = 6;
    for( i=0; i<A.Length; i++ ) {
    l = new TMyEdit(this);
    l->Parent = this;
    l->Left = i*50;
    l->Top = 100;
    l->Width = 40;
    A[i] = l;
    A[i]->Text = IntToStr(i);
    }

    Soweit so gut! Nun will ich das ganze aber mehrdimensional haben.
    A[0].Length = 3;
    bringt mir ne Fehlermeldung 'Auf linker Seite der Struktur ist . oder .* erforderlich'

    Die Funktion SetLength(), laut Beispiel synonym verwendbar kennt der Compiler gar nicht. Ja, die sysdyn.h ist eingebunden.

    Wo bitte hängt mein Hirn? Wäre dankbar wenn mir jemand auf die Sprünge helfen könnte.

    Manni

  • #2
    Na klasse der hat die Zeilenumbrüche net mitgenommen. Also nochmal der Quelltext:

    void __fastcall TForm1::FormCreate(TObject *Sender)

    {
    TMyEdit *l;
    int i,j;

    A.Length = 6;
    for( i=0; i<A.Length; i++ ) {
    l = new TMyEdit(this);
    l->Parent = this;
    l->Left = i*50;
    l->Top = 100;
    l->Width = 40;
    A[i] = l;
    A[i]->Text = IntToStr(i);

    Comment


    • #3
      Hi Manni,

      kleiner Denkfehler mit A[0].Length (was außerdem A[0]->Length geschrieben sein müßte), versuchst Du die Length vom ersten TMyEdit in A zu ändern (und Length gibt es wahrscheinlich nicht).

      manchmal lohnt sich ein Blick in die Onlinehilfe:<BR>
      Erzeugung mehrdimensionale DynamicArrays:
      <PRE>
      DynamicArray<DynamicArray<AnsiString> > twoD;
      </PRE>

      Außerdem könntest Du weiterhin mit einem eindimensionalen Array arbeiten und Length = i * j setzen (was so ziemlich den gleichen Effekt hat).

      Die Funktion SetLength() gibt es in DynamicArray nicht, sondern 'nur' set_length().

      Grüße Joche

      Comment


      • #4
        <i>Na klasse der hat die Zeilenumbrüche net mitgenommen. Also nochmal der Quelltext: </i><br>
        Ist nicht wirklich besser geworden. :-)
        <br>Hast du ein &lt;pre&gt; um den Quellcode rumgemacht?
        <br>Uli

        Comment


        • #5
          Nein Sacktuch und Asche, hab ich erst später rechts gelesen ....

          ... wer lesen kann ist klar im Vorteil. :-

          Comment


          • #6
            Hallo Jochen,

            selbstverständlich habe ich die online Hilfe durchforstet und die deklaration wohl etwas überlesen. :-(

            Schon klar im Speicher liegt das eh mit Länge i*j vor, aber es ist einfacher das Array mit A[][] anzusprechen ... ohne viel rumzurechen.

            Witzig ist nur das in der Online Hilfe steht (bcb Version 5):

            <PRE>
            typedef DynamicArray< DynamicArray < AnsiString > > T2DStringArray;

            void foo(T2DStringArray &s_array)
            {
            SetLength(s_array, 10);
            for (int i=0; i<s_array.Length; i++)
            { // Größe der zweiten Dimensionen festlegen
            // (Beachten Sie die unterschiedliche Größe!)
            SetLength(s_array[i], i+1);
            for (int j=0; j<s_array[i].Length; j++)
            /* */ s_array[i][j] = itoa(i*10+j);
            }
            }
            </PRE>

            steht doch eindeutig SetLength()<BR>

            Jedenfalls funktioniert es jetzt auch mit <BR>
            A[0].Length = 3;
            <BR>

            Erstmal vielen Dank für die schnelle Hilfe.

            Mann

            Comment


            • #7
              Hallo nochmal Manni,

              >Jedenfalls funktioniert es jetzt auch mit
              >A[0].Length = 3;

              Wieso denn plötzlich? Was hast Du geändert?

              Grüße Joche

              Comment

              Working...
              X