2016-04-29 4 views
1

Dies ist mein erstes Mal mit jeder Art von Baum arbeiten. Ich habe eine tnode-Klasse für meinen Baum erstellt und jetzt versuche ich, die Klasse für den Baum selbst zu erstellen. Allerdings habe ich ein paar Fehler bekommen, die ich nicht herausfinden kann.Fehler für n-ary Baum C++

#ifndef Tree_Ntree_h 
#define Tree_Ntree_h 
// SIZE reprsents the max number of children a node can have 
#define SIZE 10 
// SEPERATE will allow the program to distinguish when a subtree no longer has children 
#define SEPERATOR '@' 
#include <iostream> 
#include <fstream> 

template <typename T> 
class tnode{ 
public: 
T value; 
tnode *child[SIZE]; 
tnode() {}; 
tnode<T> *addChild(T data){ 
    tnode*temp = new tnode; 
    temp -> value = data; 
    for (int i=0; i<SIZE; i++) 
     temp -> child[i] = NULL; 
    return temp; 
} 
}; 



template <typename T> 
class Ntree{ 
private: 
tnode<T> *root; 
T data; 
std::string filename; 

public: 

Ntree(){ root= NULL;} 

Ntree(T data){ *root = data;} 



inline T getRoot(){return root;} 

Meine Fehler sind in den letzten drei Zeilen. In der letzten Zeile der meinen Code (getRoot), das ist der Fehler:

No viable conversion from 'tnode > *' to 'std::__1::basic_string'

In der zweiten bis letzten Zeile und die dritte bis letzte Zeile (* root = data) (root = NULL) ist dies die Fehler:

Ich verstehe nicht, warum es notwendig ist, den = Operator in dieser Situation zu überlasten.

+0

Warum nicht die Größe als Template-Argument anstelle eines Makros verwenden? –

+0

Und Ihr Beispiel enthält viele Syntaxfehler, wie die Klasse ntree nicht endet. Bitte korrigieren Sie den Code, damit wir uns auf die Fehler konzentrieren können, die Sie nicht verstehen. –

Antwort

0

root ist ein tnode<T> * und getRoot ein T Objekt zurück. Der Compiler weiß nicht, wie man das eine in das andere konvertiert. Sie möchten wahrscheinlich nur zurückgeben root->value

Sie haben jedoch keinen Speicherplatz für root reserviert und es könnte NULL sein, so müssen Sie bestimmen, was zu tun ist, wenn es NULL ist.

In dieser Zeile:

Ntree(T data){ *root = data;} 

Dieses Mal zuweisen ein T zu einem tnode<T>, die der Compiler nicht weiß, wie zu tun ist. Sie haben auch keinen Speicher für root zugewiesen. Stattdessen möchten Sie wahrscheinlich todo so etwas wie:

Ntree(T data){ root = new T; root->value = data;} 

Oder besser noch einen tnode Konstruktor, der einen Wert annimmt.