Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi simple zuweisung funktioniert nicht (https://www.delphipraxis.net/3110-simple-zuweisung-funktioniert-nicht.html)

Haegar 23. Feb 2003 21:01


simple zuweisung funktioniert nicht
 
hallöle, ich bins wieder, ich hab mal wieder was einfaches schreiben wollen, hier der ausschnitt der nicht funktioniert:
Delphi-Quellcode:
unit auto;

interface
uses Graphics;
 type TAuto=class(TObject)
  private
  public
   v:Single;             //Geschwindigkeit
   x, y:integer;         //Position
   farbe:longint;        //Lackierung
   constructor erzeugen(xpos,ypos:integer; color:longint);
   procedure schneller(dv:real);
   procedure bremsen (dv:real);
   procedure zeichnen(canvas:TCanvas);
 end;
implementation

constructor TAuto.erzeugen(xpos,ypos:integer; color:longint);
begin
 x:=xpos;        //
 y:=ypos;        // falsche werte (aber xpos,ypos,color richtig!!
 farbe:=color;   //
end;
das is der teil in der Auto-unit......
in unit1 steht folgendes:

Delphi-Quellcode:
procedure TForm1.btn_autoClick(Sender: TObject);
begin
 auto1.erzeugen(5,55,clNavy);
end;
nun die frage! beim debugging mit F7 komm ich bis zu Zeile x:=xpos; (in unit Auto) wenn ich mir dann den wert für x anschaue liegt der exakt bei 167772182, y hat dann auch sonen utopischen wert, und farbe entspricht nicht dem wert von color!

Woran kann das denn liegen, das is doch das simpelste was es gibt, und meiner meinung nach kein fehler drin.
ich hab ein Image mit Align=alClient auf der Form liegen, aber die das kann doch nicht der Grund sein oder? ich meine das er vielleicht mit der Position auf der Form, bzw. dem Image ducheinander kommt.

was sagt ihr dazu? :?

gruß haegar

Luckie 23. Feb 2003 21:07

Und wenn du einen Schritt weitergehst. Was steht dann in x?

Haegar 23. Feb 2003 21:09

naja macht er ja dann nicht, kommt ja gleich programm absturz (bzw. felhermeldung von wegen "acess violation und so weiter") und dann kan ich nicht weitermachen

Touchdown 23. Feb 2003 21:15

Du kannst den Constructor nicht wie eine normale Procedure verwenden. Er kann verwendet werden zum über diesen Constructor eine Instanz dieser Klasse zu erzeugen.

Delphi-Quellcode:
var
  Pointer : TAuto;
begin
  Pointer := TAuto.erzeuge( x, y, a);
end;

Chewie 23. Feb 2003 21:15

Das kann ja gar nicht funktionieren. Dein Konstruktur ist schon soweit korrekt, nur rufst du ihn falsch auf:

Delphi-Quellcode:
auto1.erzeugen(5,55,clNavy);
Du rufst hier eine Methode eines Objektes auf, das noch gar nicht existiert. So muss es richtig lauten:

Delphi-Quellcode:
auto1 := TAuto.erzeugen(5,55,clNavy);
Und der utopische Wert in der Variablen kommt daher, dass der Speicherbereich, in dem die Variable liegt, vorher nicht leer war. Das ist aber kein Problem, obiges verursacht den Fehler.

Edit: Mist, zu spät :shock:

Haegar 23. Feb 2003 21:18

wie peinlich, naja kann jedem mal passieren, häät nur intensiver in mein büchlein schauen müssen, da steht das ja auch an einem beispiel erklärt ;)

danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz