Einzelnen Beitrag anzeigen

clues1

Registriert seit: 11. Feb 2004
97 Beiträge
 
#1

C++ und Delphi -> Rekursiv Problem

  Alt 18. Sep 2005, 18:02
Hallo, habe hier ein riesen Problem. Irgendwie versteht mein C++ Code nicht was ich will.
Ich wollte eine bestimmte Funktion von Delphi nach C++ portieren. Die Delphi Funktion funktioniert einwandfrei.

Also zu der Funktion.
Ich habe eine DB, in der einige Informationen gepseichert sind. Ähnlicher Aufbau wie eine Baumstruktur.
Nun wollte ich das auslesen.

"LoadNodes" gibt von einer bestimmten ID die anzahl der Sub Knoten wieder.
"ReadNode" liest nur die Werte des Sub Knotens aus.
"FLoadNodes" wird nur für die rekursion benötigt.

Ich starte die Funktion FLoadNodes in C++ und übergebe ID = -1.
Dann liest er den ersten baum einwandfrei aber sobald die rekursion einsetzt, sind alle werte von i völlig Falsch.

Beispiel:

Root
|- Test1
|- Test11
|- Test111
|- Test12
|- Test13
|- Test2
|- Test21
|- Test22

Delphi liest das wunderbar aus.
Bei C++ bekommt der nach dem Lesen von Test111 zum sprung in Test12 ein Problem.
Die Variable i für den inkrement wird auf einen utopischen Wert gesetzt. Aber erst, sobald die FLoadNodes selber das erstemal beendet wurde durch die Bedingung.
Kann dass sein, dass die Variablen nicht lokal sind sondern global werden?

Hier die Funktionierende Delphi Funktion.
Delphi-Quellcode:
  function FLoadNodes(id: integer): integer;
  var i: integer;
      c: integer;
      res: PNavRes;
  begin
    new(res);
    i := -1;
    repeat
      inc(i);
      c := LoadNodes(id, 1);

      if (i < c) then
         if (ReadNode(i, res)) then begin
            FLoadNodes(res^.ID); // open recursive the function if sub notes are available from this node
         end;

      c := LoadNodes(id, 1);
    until (c = 0) or (i >= c);
  end;
Dies wollte ich Portieren nach C++:
Delphi-Quellcode:
void FLoadNodes(int id){ // this function load the nodes in recursive methode
  int i;
  int c;

  i = -1;
  do {

      i++;
      c = LoadNodes(id, 1);
      if (i < c){
        if (ReadNode(i, &NavRes) == true){
            FLoadNodes(NavRes.ID); // open recursive the function if sub notes are available from this node
         }

      }

      c = LoadNodes(id, 1);
  } while( (c == 0) || (i >= c) );
}
Habt Ihr eine Idee?
THX
Meine Easy Database Komponenten[/url] (EDB) Datenbankfuntionen für Delphi Personal/Std und höher. MySQL, MSSQL, Access (JET), Oracle, CSV, TXT, DBase und noch viele mehr. http://www.delphipraxis.net/internal...ct.php?t=37505
  Mit Zitat antworten Zitat