darkman97 ha scritto:
Salve, non capisco perchè mi stampa un valore casuale al posto del 5, il programma ha una lista con dei nodi che hanno dentro una pila, il metodo newpush dovrebbe creare un nuovo nodo e inserire il primo elemento nella pila del nodo appena creato, stampa dovrebbe stampare l'elemento cima di tutti i nodi della lista in ordine crescente dei valori della cima.
Ciao.
La funzione pila<H> getpila() restituisce una copia di Pila, non Pila, per cui quando richiami la push(x) all'interno della newpush(int, H) vai ad agire (incremento dell'indice di cima del vettore ed inserimento dell'elemento) non sulla pila che hai allocato in precedenza, ma su una sua copia.
Per farlo funzionare, è bastato aggiustare la getpila in modo da fargli restituire un puntatore a Pila:
pila<H>* getpila()
{
return &Pila;
}
Quindi, la newpush diventa:
void newpush(int dim, H x)
{
if (testa == 0)
{
testa = new nodo<H>(dim);
testa->getpila()->push(x); //NON più il punto, ma -> !!!
//prova
cout<<testa->getpila()->get()<<endl;
}
else
{
nodo<H>* nuovo = new nodo<H>(dim);
nuovo->getpila()->push(x); // Lo stesso!!
nuovo->setsucc(testa);
testa->setprec(nuovo);
testa = nuovo;
}
}
Il ciclo di stampa diventa:
while (temp != 0)
{
cout << temp->getpila()->get() << " ";
temp = temp->getsucc();
}
E insomma tutte le funzioni che richiamano getpila() per poi accedere ad un elemento del valore di ritorno dovranno essere seguite dall'operatore -> e non più dal punto.