2016-04-17 14 views
-1
class Node { 
private: 
    Node *left = NULL, *right = NULL; 
    char data; 
public: 
    Node(char new_data) { 
     data = new_data; 
    } 
    Node *get_left() { 
     return left; 
    } 
    Node *get_right() { 
     return right; 
    } 
    char get_data() { 
     return data; 
    } 
    void set_data(char new_data) { 
     data = new_data; 
    } 
}; 

Ich habe es debugged (mit gdb sowie cout) und es scheint, dass die set_data-Funktion das Problem ist. Warum?Kann nicht sehen, warum dies segzufälliges ist

Es gibt viel mehr Code, aber ich nehme an, dass mehr Code nicht notwendig ist.

EDIT:

class tree { 
private: 
    Node *root; 
public: 
    tree(char ch) { 
     cout << "ASDASD"; //using this to identify error 
     root->set_data(ch); 
     cout << root->get_data(); //using this to identify error 
    } 
}; 

EDIT 2:

#include <iostream> 
#include "tree.h" 
#include <cctype> 
using namespace std; 

int main() { 
char c; 

cout << "Enter a series of letters: "; 

cin >> c; 
tree t(c); //sets first one to root 
while(cin) { //change?? 
    cin >> c; 
    if (isdigit(c)) break; 
    Node *n; 
    n->set_data(c); 
    t.insert(n); 
} 
} 

-Code soll von der Tastatur lesen, eine Zahl bis zu lesen. Es liest alle Buchstaben, aber wenn ich eine Nummer eintippe, um zu versuchen, zu beenden, segmentiert es.

+0

Achten Sie auf 'NULL' Knoten, während Sie den Baum gehen. – xbug

+0

Ich bin mir nicht sicher, ob ich irgendetwas mit Null-Knoten mache. Die Baumklasse verfügt über einen Konstruktor, der set_data() verwendet, um seinen Stammknoten festzulegen. Ich habe den ursprünglichen Beitrag aktualisiert, um den Hauptteil der Baumklasse einzuschließen. Ist da etwas nicht in Ordnung? – Locrian7

+2

Wann wird 'root' auf eine Instanz eines' Node * 'gesetzt? – bmm6o

Antwort

1
class tree { 
private: 
    Node *root; 
public: 
    tree(char ch) { 
     cout << "ASDASD"; //using this to identify error 
     root->set_data(ch); // **HERE** 
     cout << root->get_data(); //using this to identify error 
    } 
}; 

An diesem Punkt root zeigt nicht auf irgendetwas. Es ist also ein Fehler, es zu dereferenzieren. Bevor Sie die Sache verwenden können, auf die ein Zeiger zeigt, müssen Sie den Zeiger auf etwas zeigen.

Und Sie haben das gleiche Problem hier:

Node *n; 
n->set_data(c); 

Die set_data Funktion ein Node ‚s Daten einzustellen verwendet wird. Sie müssen also bereits eine Node haben, um es anzurufen. Nirgendwo erstellen Sie eine Node, und n zeigt hier nicht auf einen.

Verwandte Themen