简体   繁体   中英

errors for n-ary tree C++

This is my first time working with any kind of tree. I created a tnode class for my tree and now I'm trying to create the class for the tree itself. However I've gotten a couple errors I can't figure out.

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

My errors are in the last three lines. In the last line of my code (getRoot), this is the error:

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

In the second to last line and the third to last line (*root = data) (root = NULL) this is the error:

No viable overloaded '='

I don't understand why it is necessary to overload the = operator in this situation.

root is a tnode<T> * and getRoot is returning a T object. The compiler doesn't know how to convert one to the other. You probably just want to return root->value

However, you haven't allocated any space for root and it might be NULL , so you need to determine what to do when it is NULL.

In this line:

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

This time you are assigning a T to a tnode<T> , which the compiler doesn't know how to do. You also haven't allocated any memory for root . Instead you probably want todo something like:

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

Or better still have a tnode constructor that takes a value.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM