Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Pointer an Funktion uebergeben
blafu - Fr 06.01.06 20:30
Titel: Pointer an Funktion uebergeben
Hallo,
ich moechte einen Pointer, der auf den Anfang eines binaeren Suchbaumes zeigt, an eine Funktion uebergeben bzw. die Funktion soll der Baum rekursiv aufbauen. Nur leider beschwert sich Delphi immer wieder mit der Meldung:
Quelltext
1: 2: 3:
| [Error] main.pas(53): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'KnotenPointer' [Error] main.pas(55): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'KnotenPointer' [Fatal Error] BBaum.dpr(5): Could not compile used unit 'main.pas' |
Zeile 53 sollte hier Zeile 18 entsprechen.
Und hier der Quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| TYPE KnotenPointer = ^Knoten;
Knoten = Record Daten : Integer; Links, Rechts : KnotenPointer End;
VAR Wurzel : KnotenPointer; Zahl : Integer; procedure WertHinzufuegen(Zeiger : KnotenPointer); begin if (Zeiger = NIL) then begin New(Zeiger); Zeiger^.Daten := Zahl; Zeiger^.Links := NIL; Zeiger^.Rechts := NIL; end else if Zeiger^.Daten >= Zahl then Zeiger^.Links := WertHinzufuegen(Zeiger^.Links) else if Zeiger^.Daten <= Zahl then Zeiger^.Rechts := WertHinzufuegen(Zeiger^.Rechts) end; |
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Allesquarks - Sa 07.01.06 01:48
Probier mal:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| TYPE KnotenPointer = ^Knoten;
Knoten = Record Daten : Integer; Links, Rechts : KnotenPointer End;
VAR Wurzel : KnotenPointer; Zahl : Integer; procedure WertHinzufuegen(Zeiger : KnotenPointer); begin if (Zeiger = NIL) then begin New(Zeiger); Zeiger^.Daten := Zahl; Zeiger^.Links := NIL; Zeiger^.Rechts := NIL; end else if Zeiger^.Daten >= Zahl then Zeiger^.Links := WertHinzufuegen((Zeiger^).Links) else if Zeiger^.Daten <= Zahl then Zeiger^.Rechts := WertHinzufuegen((Zeiger^).Rechts) end; |
blafu - Sa 07.01.06 13:13
Hallo,
danke fuer den Vorschlag aber das fuehrt immer noch zur selben Fehlermeldung.
Motzi - Sa 07.01.06 13:25
Titel: Re: Pointer an Funktion uebergeben
blafu hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure WertHinzufuegen(Zeiger : KnotenPointer); begin end else if Zeiger^.Daten >= Zahl then Zeiger^.Links := WertHinzufuegen(Zeiger^.Links) else if Zeiger^.Daten <= Zahl then Zeiger^.Rechts := WertHinzufuegen(Zeiger^.Rechts) end; | |
Ich weiß nicht was genau du vorhast, aber
WertHinzufügen ist eine Prozedur, gibt also keinen Wert zurück. Du versuchst hier aber den (nicht vorhandenen) Rückgabewert von
Werthinzufügen einem
KnotenPointer zuzuweisen was logischerweise nicht geht..!
Gruß, Motzi
blafu - Sa 07.01.06 14:10
Autsch! Das ist mir jetzt fast peinlich, dass mir das selber nicht aufgefallen ist, entschuldigung.
Was ich machen moechte? Ich moechte einen binaeren Suchbaum mit dieser Funktion erzeugen.
blafu - Sa 07.01.06 20:04
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function WertHinzufuegen(Zeiger : KnotenPointer) : KnotenPointer; begin if (Zeiger = NIL) then begin New(Zeiger); Zeiger^.Daten := Zahl; Zeiger^.Links := NIL; Zeiger^.Rechts := NIL; end else if Zeiger^.Daten >= Zahl then Zeiger^.Links := WertHinzufuegen(Zeiger^.Links) else if Zeiger^.Daten < Zahl then Zeiger^.Rechts := WertHinzufuegen(Zeiger^.Rechts); WertHinzufuegen := Zeiger; end; |
So funktioniert es jetzt, danke.
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt
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!