PDA

Visualizza la versione completa : [C++]Problema doppio puntatore


sweet93
19-02-2014, 12:56
Salve,
come da titolo ho un problema quando provo a passare un doppio puntatore,
io ho questa classe:

template <typename T>
class BinaryNode
{
private:
T key;
BinaryNode<T>* left;
BinaryNode<T>* right;
BinaryNode<T>* parent;
public:
T getkey() const { return key; }
void setkey(T k){ key = k; }
BinaryNode<T>* getleft() const { return left; }
void setleft(BinaryNode<T>* l){ left = l; }
BinaryNode<T>* getright() const { return right; }
void setright(BinaryNode<T>* r){ right = r; }
BinaryNode<T>* getparent() const { return parent; }
void setparent(BinaryNode<T>* p){ parent = p; }
};

e questo metodo:

template <typename T>void BinarySearchTree<T>::insert(BinaryNode<T>** node, T key)
{
if (*node == NULL)
{
*node = this->newNode(key);
cout << "-Creating... " << (*node)->getkey() << endl << endl;
}
else
{
if (key <= (*node)->getkey())
{
cout << "<-Left" << endl;
insert(&(*node)->left, key); //in questa linea mi da errore
(*node)->getleft()->setparent(*node);
}
else
{
cout << "Right->" << endl;
insert(&(*node)->right, key); //in questa linea mi da errore
(*node)->getright()->setparent(*node);
}
}
}

Solo che quando vado a compilare mi da errore nella linea commentata
questo errore:

1>------ Inizio compilazione: Progetto: [ASD]Vocabolario, Configurazione: Debug Win32 ------
1> main.cpp
1>c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(124): error C2102: '&' richiede un l-value
1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(113): durante la compilazione della classe modello, funzione membro 'void BinarySearchTree<std::string>::insert(BinaryNode<T> **,T)'
1> with
1> [
1> T=std::string
1> ]
1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(104): vedere il riferimento all'istanza del modello di funzione 'void BinarySearchTree<std::string>::insert(BinaryNode<T> **,T)' in corso di compilazione
1> with
1> [
1> T=std::string
1> ]
1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(103): durante la compilazione della classe modello, funzione membro 'void BinarySearchTree<std::string>::insert(T)'
1> with
1> [
1> T=std::string
1> ]
1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\main.cpp(25): vedere il riferimento all'istanza del modello di funzione 'void BinarySearchTree<std::string>::insert(T)' in corso di compilazione
1> with
1> [
1> T=std::string
1> ]
1> c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\main.cpp(9): vedere il riferimento all'istanza del modello di classe 'BinarySearchTree<std::string>' in corso di compilazione​
1>c:\users\davide\dropbox\davide\[asd]\progetto\[asd]vocabolario\[asd]vocabolario\classi.h(130): error C2102: '&' richiede un l-value
========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========

Qualcuno sa come risolverlo?
Grazie mille,
Bye;)

g.b99pm10
19-02-2014, 16:13
prova a dichiarare il puntatore di puntatore con ** e non con un solo asterisco, per es
int **micio_micio;

sweet93
19-02-2014, 16:54
prova a dichiarare il puntatore di puntatore con ** e non con un solo asterisco, per es
int **micio_micio;
No non va, cmq ho capito il problema, ma non so come risolverlo, praticamente nell'espressione:

insert(&(*node)->getleft(), key);
insert(&(*node)->getright(), key);
richiesto un l-value, ovvero un valore non temporaneo, mentre la getleft ritorna un valore che temporaneo.
Ma non so come fixare questa cosa :(

Loading