Problem bei Funktionsaufruf mit Array von selbst definiertem Dateityp.
-
Mein Ziel ist es eine Textdatei mit der Huffman-Codierung zu kompriemieren.
Dazu habe ich die Häufigkeit der Zeichen gezählt und diese in einem integer Array abgespeichert.
Bis hier hin gibt es keine ProblemeFür den Huffman-Baum habe ich mir Folgende Datentypen definiert:
struct bknoten{ int d; struct bknoten *l; struct bknoten *r; }; struct hbaum{ struct bknoten *wurzel; };Für die Erstellung des Huffman-Baums wollte ich eine Methode schreiben die ein Array des Typs bknoten erhält und dann jeweils die beiden kleinsten Elemente als linken und rechten Kindknoten zu einem neuen Knoten angehängt wird.
Danach soll sich die Methode mit einem gekürztem Array selbst aufrufen.
Hier einmal ein Teil des Codes:(dieser Teil macht ebenfalls keine Probleme)hbaum erstellehbaum(bknoten a[]) { int laenge = (sizeof a); if (laenge < 3) //Array hat Länge 2 {....} else //Array länger als 2 { int min = 0; int min2 = 0; for (int i = 1;i<laenge-1;i++) //suche 2 kleinsten elemente des Arrays { min = a[0].d; min2 = 0; if (a[i].d<=min) { min2 = min; min = a[i].d; } } // Array kopier außer min, min2 + neuer knoten (min,min2) bknoten *b; b = new bknoten[(laenge - 1)]; int j = 0; for (int i = 0;i<laenge-2;i++) { if ((i== min)||i== min2 ) { //minimum wird übersprungen } else { b[j] = a[i]; j++; } } //min, min2 zusammenfügen bknoten *c; c = new bknoten; c->r = &a[min]; c->l = &a[min2]; c->d = a[min].d + a[min2].d; delete [] a; b[j]= *c; //neuen Knoten in Array einfügen return erstellehbaum(b);Jetzt zu meinem eigentlichen Problem
Aus dem integer Array vom Anfang erstelle ich ein neues Array vom Typ bknoten:
Und möchte dann die Methode erstellehbaum mit diesem Array aufrufen.
Dann erhalte ich folgende Fehlermeldung:
cannot call member function 'hbaum erstellehbaum(bknoten*)' without objectKann mir bitte jemand sagen was ich ändern muss damit es funktioniert.
bknoten *bknotenarray = new bknoten [(sizeof fuenferarray)]; for(int i = 0;i < sizeof fuenferarray;i++) { bknotenarray[i].d = fuenferarray[i]; bknotenarray[i].r = 0; bknotenarray[i].l = 0; } erstellehbaum(bknotenarray);
-
Das musst du dir selbst beantworten. Die Fehlermeldung ist doch deutlich: erstellebaum ist eine Memberfunktion von ??? (du zeigst es nicht), das kannst du nur mit einem Objekt dieser Klasse aufrufen. Vom Namen der Funktion her würde ich mal tippen, dass das gar keine Memberfunktion von ??? sein soll, denn was für eine Klasse von Objekten erstellt Bäume?