n-ary树C ++的错误

时间:2016-04-29 02:09:40

标签: c++ compiler-errors tree

这是我第一次使用任何一种树。我为我的树创建了一个tnode类,现在我正在尝试为树本身创建类。但是我遇到了一些我无法弄清楚的错误。

#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;}

我的错误在最后三行。 在我的代码的最后一行(getRoot)中,这是错误:

  

'tnode&gt;没有可行的转换*' 至   '的std :: __ 1 :: basic_string的'

在倒数第二行和第三行到最后一行(* root = data)(root = NULL)这是错误:

  

没有可行的重载'='

我不明白为什么在这种情况下需要重载=运算符。

1 个答案:

答案 0 :(得分:0)

roottnode<T> *getRoot正在返回T个对象。编译器不知道如何将一个转换为另一个。您可能只想返回root->value

但是,您没有为root分配任何空间,它可能是NULL,因此您需要确定当它为NULL时要执行的操作。

在这一行:

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

这次您将T分配给tnode<T>,编译器不知道该怎么做。您还没有为root分配任何内存。相反,你可能想要这样的东西:

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

或者更好的是还有tnode构造函数来获取值。