Salve a tutti ,
devo creare un programma di un albero binario dove i nodi sono di tipo non definito , quindi bisogna utilizzare i template. il problema me lo da il main : una volta dichiarato un oggetto della classe albero ( Tree ) mi da errori quando voglio chiamare le funzioni membro. Incollo il programma diviso in 4 file :
TreeNode.h
#ifndef TREENODE_H_
#define TREENODE_H_
#include "Tree.h"
template <class NODE > class Tree;
template <class NODE >
class TreeNode {
friend class Tree<NODE>;
public:
TreeNode(const NODE &value): leftPtr(0), rightPtr(0), data(value){};
NODE getData() { return data; };
private:
TreeNode<NODE> *leftPtr;
TreeNode<NODE> *rightPtr;
NODE data;
};
#endif /* TREENODE_H_ */
Tree.h
#ifndef TREE_H_
#define TREE_H_
#include <iostream>
using namespace std;
#include "TreeNode.h"
template <class NODE >
class Tree {
public:
Tree();
void insertNode( NODE & );
void stampa();
private:
void Print( TreeNode< NODE > * );
void insert( TreeNode< NODE > * , NODE &);
TreeNode< NODE > *rootPtr;
};
#endif /* TREE_H_ */
Tree.cpp
#include "Tree.h"
template <class NODE>
Tree<NODE>::Tree() { rootPtr = 0; }
template <class NODE>
void Tree< NODE >::insertNode( NODE &d ) {
insert(rootPtr, d);
}
template <class NODE>
void Tree< NODE >::insert( TreeNode<NODE> * ptr , NODE &d) {
if ( ptr== 0 )
ptr = new TreeNode<NODE>(d);
else
if ( ptr->data > d )
insert( &(ptr->leftPtr), d);
else if ( ptr-> data < d )
insert( &(ptr->rightPtr), d);
else
cout << "Valore gia' esistente: dup "<<endl;
}
template <class NODE>
void Tree<NODE>::stampa() {
Print(rootPtr);
}
template<class NODE>
void Tree<NODE>::Print ( TreeNode<NODE> * ptr) {
if (ptr!= 0)
{
Print(ptr->left);
cout << ptr->data<< " ";
Print(ptr->right);
}
}
Main.cpp
#include <iostream>
#include "Tree.h"
using namespace std;
int main() {
int value;
Tree< int > x();
for ( int i=0; i< 10; i++ )
{
cout << i << ". value: ";
cin >> value;
x.insertNode(value);
}
x.stampa();
return 0;
}
Come potete vedere il programma fa inserire 10 valori creando per esempio un albero di tipo int e poi li deve stampare in ordine andando a richiamare le funzioni membro insertNode() e stampa(). In quest' ultime il compilatore mi da errore dicendo il seguendo messaggio:
Description Resource Path Location Type
request for member 'insertNode' in 'x', which is of non-class type 'Tree<int>()' Homework 15.cpp /Albero/src line 21 C/C++ Problem
Grazie in anticipo
Distinti Saluti,
Alessandro