Casting von int nach void-Zeiger

Guten Tag,
Ich habe gerade angefangen zu lernen, void-Zeiger in c++ und jetzt Schreibe ich binären Baum, wo ein Wert gespeichert, jeder Knoten ist void-Zeiger auf einen Wert.

struct TreeNode
{
    int count;
    void* data;
    TreeNode *left;
    TreeNode *right;
    };

Das problem trat im ersten Verfahren-add-Methode.
meine Methode nimmt jetzt ein int parameter und nichts zurückgeben
Habe ich ganz am Anfang erstellen Sie neue Knoten.
Dafür müsste ich mir den cast von integer in die leere.
Programm compiliert und erstes element fügt root richtig-aber wenn ich dann senden Sie eine andere Nummer zu Methode speichert diese im root wieder.
also, wenn Sie in der main habe ich so etwas wie
Baum.addToTree(12);
Baum.addToTree(13);
als würde es speichern, 12 erste und als direkt nach der else-Anweisung(code unten), wie das root->Daten i 13.

void Tree::addToTree(int num)
{
    if(root==NULL){
        root= new TreeNode();
        root->data=#
        //((int *)(root->data)) = num;//i tried to convert to void* in this way but it give me segmentation fault
        root->left=NULL;
        root->right=NULL;
    }
    else{
        //here root value is already changed
        int *intPtr = static_cast<int*>(root->data);
        cout << "key2" << *intPtrT << endl;
        //TreeNode* current= insert(num,root);
    }
}

wie ich verstanden habe das ist weil ich benutze &num so meine parameter immer Riss in einem Ort und einer Wurzel "verbunden" zu &num es zu ändern, wie gut.

Ich habe versucht, Lösungen zu finden, aber war erfolglos.
Gibt es eine Möglichkeit, cat int, void-pointer?

  • Sie sind nicht Gießen Sie den Zeiger auf void in int. Sie Gießen es auf einen Zeiger auf int.
  • ((int *)(root->data)) = num kann nicht kompilieren. Müsste ((int *)(root->data)) = &num oder *((int *)(root->data)) = num. Welche war es?
  • Danke allen für Ihre Antwort.Sie waren sehr hilfreich.Ich habe "new int(num)"-es funktioniert. Zu der Vorlage haben-das wäre effizienter für sicher, aber ich bin ein student jetzt und meine Aufgabe klar brauchen wir leere ,die ich nicht sehr angemessen,wie ich schon sagte)
InformationsquelleAutor aldebaran | 2013-11-06
Schreibe einen Kommentar