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.