Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem beim Einbinden einer eigenen Unit
Shorty - Do 28.12.06 17:27
Titel: Problem beim Einbinden einer eigenen Unit
Hallo!
Ich habe mit einem Freund ein Programm geschrieben, mit dem 2 Bingozettel mit je 15 Zahlen generiert werden. Die Zahlen dürfen auf einem Zettel immer nur einmal erscheinen und sollen der Reihenfolge nach geordnet werden.
Jetzt habe ich einen Sortieralgorithmus geschrieben, der die Zahlen des Arrays ordnet. (Ist wahrscheinlich nicht optimal geworden, hab nämlich quicksort und bubblesort und was das da noch gibt, nicht verstanden und hab mir dann selbst Gedanken gemacht, wie das zu realisieren ist :wink: )
Weil ich mir jetzt vorstellen kann, dass ich so ein ordnen öfters brauchen kann, wollte ich mich jetzt mal damit beschäftigen, wie man eigentlich so eine eigene Unit erstellt, das ist im Moment mein Stand:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| unit zahlensortieren;
interface
type TFeld = array of integer;
procedure sortieren(feld: TFeld);
var sortiert: TFeld;
implementation
procedure sortieren(feld: TFeld); var i, j, speichern: integer; begin for j:=1 to 15 do begin for i:=0 to 14 do begin if i=14 then begin if feld[14]<feld[13] then begin speichern:=feld[14]; feld[14]:=feld[13]; feld[13]:=speichern; end; end else begin if feld[i]>feld[i+1] then begin speichern:=feld[i+1]; feld[i+1]:=feld[i]; feld[i]:=speichern; end; end; end; end; for i:=0 to 14 do sortiert[i]:=feld[i]; end;
end. |
Jetzt möchte ich diese Procedure über die main-unit aufrufen, dab das jetzt mit dem Befehl sortieren(zahlen1) gemacht, zahlen1 ist vom Typ TFeld = array[0..14] of integer. wenn ich das Programm dann aber starten möchte, gibts die Fehlermeldung "[Error] Unit1.pas(79): Incompatible types: 'Unit1.TFeld' and 'zahlensortieren.TFeld'"!
Kann mir da jemand helfen?
rey003 - Do 28.12.06 17:54
Hallo,
kann es sein das du TFeld zweimal deklariert hast? (also einmal in der Main-Unit und in deiner Zusatz-Unit)
Ich weiß gar nicht das eine ist doch ein dynamischer array und das andere nicht!
Zeig am besten mal den Code, wo du die Procedure aufrufst! (mit Deklarationen) :wink:
//Edit: In deiner Sortierfunktion solltest du die festen zahlen durch dynamische ersetzen (man weiß ja nie wie lang der array ist, wenn du das auch mal für was anderes benutzen willst) :wink:
Also dann mit length(array) die Länge abfragen
Shorty - Do 28.12.06 18:02
Jo, hab das zweimal deklariert...
Statisch und dynamisch ist einfach, dass einmal eine bestimmte Länge für den array festgelegt wird und einmal nicht, oder? Denn dann hab ich das so, in der Hauptunit:
Delphi-Quelltext
1:
| TFeld = array [0..14] of integer; |
und in der andere unit:
Delphi-Quelltext
1:
| type TFeld = array of integer; |
Und noch die Stelle, an der das aufgerufen wird:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.zettel1; var i, j: integer; begin randomize; for i:=0 to 14 do begin zahlen1[i]:=random(100)+1; for j:=0 to (i-1) do begin while (zahlen1[j] = zahlen1[i]) do begin zahlen1[i]:=random(100)+1; end; end; end; sortieren(zahlen1); end; |
EDIT:Jo, das hab ich auch schon gesehen, aber vorher war das Sortieren in der Hauptunit mit immer den gleichen Werten, da war ich einfach mal faul und hab das kopiert :P
GTA-Place - Do 28.12.06 18:05
Das geht eben nicht, du kannst kein dynamisches Array an eine Funktion übergeben, die ein statisches Array erwartet.
rey003 - Do 28.12.06 18:08
Gut dann wäre das ja geklärt! :wink:
Und ich kann meinen schönen Text wieder löschen! :(
Shorty - Do 28.12.06 18:13
Leider noch nicht ganz geklärt, hab jetzt in der Zusatz-unit das stehen:
Delphi-Quelltext
1:
| type TFeld = array[0..14] of integer; |
Trotzdem kommt noch die Fehlermeldung "[Error] Unit1.pas(79): Incompatible types: 'zahlensortieren.TFeld' and 'Unit1.TFeld'" :?
rey003 - Do 28.12.06 18:16
lösch mal die Deklaration in der Main-Unit! Ich weiß nicht zwei Deklarationen vertragen sich nicht! Wenn du die Unit eingebunden hast findet er den Typ auch so!
Shorty - Do 28.12.06 18:18
Ok gut, danke, jetzt geht das :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!