2016-04-29 10 views
1

これは初めてのことです。私はツリーのtnodeクラスを作成しましたが、今はツリー自体のクラスを作成しようとしています。しかし、私は理解できないいくつかのエラーを受けました。n-aryツリーのエラー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;} 

私のエラーは最後の3行です。最後の行の2番目に

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

と最後の行(*ルート=データ)(ルート= NULL)に第三これは:私のコード(getRoot)の最後の行に が、これは誤りでありますエラー:

No viable overloaded '='

なぜこのような状況で=演算子をオーバーロードする必要があるのか​​わかりません。

+0

なぜマクロの代わりにテンプレートの引数としてsizeを使用してみませんか? –

+0

あなたの例には、ntreeクラスが終了しないなど、多くの構文エラーがあります。理解できないエラーに集中できるように、コードを修正してください。 –

答えて

0

tnode<T> *であり、getRootTオブジェクトを返します。コンパイラは、一方を他方に変換する方法を知らない。あなたは、おそらくあなたはrootのための任意の領域を割り当てていない、あなたはそれがNULLのときに何をすべきかを決定する必要があるので、それは、NULLかもしれない、しかしroot->value

を返すようにしたいです。この行で

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

あなたはコンパイラが行う方法を知ってない、tnode<T>からTを割り当てているこの時間。 rootのメモリも割り当てられていません。代わりに、あなたはおそらくTODOたいような何か:

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

またはそれ以上はまだ値をとるtnodeコンストラクタを持っています。

関連する問題