E2288 und E2294 beim Compilieren



  • Hallo,
    ich versuche im Rahmen einer Fernstudiumaufgabe eine grafische Animation umzusezten. Bei den letzten Zeilen erhalte ich die Fehler E2288 und E2294, , kann die Fehler aber nicht nachvollziehen. Die Animation soll eine Grafik (Kreis, Rechteck oder Linie) von einer bestimmten Größe schrittweise auf die maximale Zeichenfläche vergrößern und wieder zurück zur Ausgangsgröße verkleinern. Geschwindigkeit und Anzahl der Wiederholungen sollen dabei durch ein UpDown-Element bzw. eine TrackBar verändert werden können. Wer kann helfen? 😞

    hier ist ein Auszug aus meinem Programm (sorry, ich bekomme die Code-Darstellung im Forum nicht hin):

    ###########################################################
    void __fastcall TForm1::btAnimationClick(TObject *Sender)
    {
    TCanvas *ZFlaeche;
    ZFlaeche=Form1->Canvas;
    int groesse;
    //hier werden die Werte aus den Feldern gelesen
    //erst den Pinsel
    ZFlaeche->Pen->Color=ColorBoxLinie->Selected;
    //hier lesen wir den Wert über das Drehfeld aus
    ZFlaeche->Pen->Width=UpDown1->Position;
    if (ComboBoxLinienStil->ItemIndex>=0)
    ZFlaeche->Pen->Style=LinienStil[ComboBoxLinienStil->ItemIndex];
    //jetzt den Hintergrund
    ZFlaeche->Brush->Color=ColorBoxHintergrund->Selected;
    if (ComboBoxHintergrundStil->ItemIndex>=0)
    ZFlaeche->Brush->Style=HintergrundStil[ComboBoxHintergrundStil->ItemIndex];
    //jetzt die Größe festlegen
    switch (TrackBar1->Position) {
    //Minimum
    case 1:
    groesse=150;
    break;
    case 2:
    groesse=50;
    break;
    case 3:
    groesse=5;
    break;
    }
    switch (RadioGroup1->ItemIndex){
    //der Kreis
    case 0:
    ZFlaeche->Ellipse(Shape1->Left+groesse,Shape1->Top+groesse,Shape1->Width-groesse,Shape1->Height-groesse);
    break;
    //das Rechteck
    case 1:
    ZFlaeche->Rectangle(Shape1->Left+groesse,Shape1->Top+groesse,Shape1->Width-groesse,Shape1->Height-groesse);
    break;
    //die Linie
    case 2:
    ZFlaeche->MoveTo(Shape1->Left+groesse,Shape1->Height/2);
    ZFlaeche->LineTo(Shape1->Width-groesse,Shape1->Height/2);
    break;
    }
    btBeenden->Enabled=false;
    //Canvas loeschen
    Refresh ();

    for (int wiederholungen=0; wiederholungen<=UpDown2->Position; wiederholungen++) {
    for (int i=1; i<=28; i++) {
    ZFlaeche.Left=ZFlaeche.Left+5;
    ZFlaeche.Top=ZFlaeche.Top+5;
    ZFlaeche.Right=ZFlaeche.Right-5;
    ZFlaeche.Bottom=ZFlaeche.Bottom-5;
    Sleep (geschwindigkeit->Position);
    }
    }
    btBeenden->Enabled=true;
    }

    #####################################################

    Für die Zeilen

    ZFlaeche.Left=ZFlaeche.Left+5;
    ZFlaeche.Top=ZFlaeche.Top+5;
    ZFlaeche.Right=ZFlaeche.Right-5;
    ZFlaeche.Bottom=ZFlaeche.Bottom-5;

    bekomme ich die Meldung: E2294: Auf linker Seite der Struktur ist . oder .* erforderlich

    für die Zeile

    Sleep (geschwindigkeit->Position);

    die Meldung: E2288: Zeiger auf Struktur auf linker Seite von-> oder von ->*erforderlich*

    Danke



  • Hallo

    zum ersten Fehler : ZFlaeche ist ein Zeiger. Richtigerweise sprichst du diesen teilweise mit -> an, und das must du auch immer. Der Punktoperator ist an den bezeichneten Stellen falsch

    zum zweiten Fehler : Leider kann ich die Deklaration von geschwindigkeit nicht in deinem Code sehen, aber ich vermute das es kein Pointer ist. Deshalb must du genau das andere vom Fehler 1 machen : Den Punktoperator anstelle des Pfeiloperators benutzen.

    Und sfds

    bis bald
    akari



  • Hallo akari,

    mit Fehler 2 hast Du Recht, es ist kein Pointer. Den habe ich jetzt anscheinend auch hinbekommen.
    Bei Fehler 1 bin ich allerdings noch nicht klar. Ich habe verschiedene Versuche gestartet, die aber immer zu einer anderen Meldung führen. Leider sind Pointer nicht gerade mein Steckenpferd... Kannst Du mir dort noch mal weiterhelfen (mit einem Beispiel)?

    Danke



  • Hallo

    Du hast doch bereits das hier richtig stehen

    ZFlaeche->MoveTo(Shape1->Left+groesse,Shape1->Height/2);
    

    Und genauso must du auch die andern Zeilen schreiben

    ZFlaeche->Left=ZFlaeche->Left+5; // Pfeiloperator!
    

    bis bald
    akari



  • Hallo akari,

    die Variante mit den Pfeiloperatoren hat leider nicht funktioniert, weil Left, Top etc. keine Elemente von TCanvas sind. Ich habe aber eine andere Variante gefunden, die jetzt auch funktioniert. Danke noch mal für die Unterstützung.

    Bis bald.


Anmelden zum Antworten