Salve a tutti. Sto sviluppando un albero binario usando i template (mi sto esercitando per un esame). Ho scoperto che usando i template non si possono passare parametri di default alle funzioni!
Riporto un pezzo di codice.
template <class T>
class Node {
T itsvalue;
Node<T> *left;
Node<T> *right;
public:
Node(T value);
void setValue(T value);
T getValue();
Node<T> *getLeft();
Node<T> *getRight();
void printValue();
~Node();

};

template <class T>
class Tree {
Node<T> * root;
int count;
public:
Tree(Node<T> * radix);
Tree(T value);
void insertNode(T value, Node<T> *temp, int i);
void printInOrder();
void printInOrder2(Node<T> *temp);
//void printPostOrder();
//void printPreOrder();
~Tree();
};


.......
.......

template <class T>
void Tree<T>::insertNode(T value, Node<T> *temp, int i) {
if (i==0) temp=root;
if (temp!=0) {
if(value<=temp->getValue()) {
if((temp->getLeft())!=0) insertNode(value, temp->getLeft(), 1);
else {
temp->getLeft()=new Node<T>(value);
count++;
}
}
if(value>temp->getValue()) {
if((temp->getRight())!=0) insertNode(value, temp->getRight(), 1);
else {
temp->getRight()=new Node<T>(value);
count++;
}
}
}
i++;
}

Guardate la funzione insertNode. Innanzitutto non badate al codice dentro alla funzione che in alcuni punti non ha senso . All'inizio volevo assegnare un valore di default a temp, ma il compilatore mi dava errore. Mi sembrava logico che il compilatore non rischiasse di assegnare un valore a un tipo <T> generico. Allora per cercare di fare quello che volevo ho aggiunto il parametro i di tipo int, assegnandoli come valore di default 0, ma anche stavolta il compilatore ha dato errore. Evidentemente i template non accettano funzioni con parametri parametri di default? Se fosse vero sarebbe molto scomodo, perchè dovrei creare diverse funzioni in più.
Qualcuno può fare chiarezza?