Salve..ho il seguente problema..

due funzioni di cui la prima restituisce un puntatore a NODO che è una struct fatta in questo modo :

typedef nodo NODO;

struct nodo {
NODO* next;
NODO* prev;
float key;
};



//------------------------------------
NODO* init(float key){
NODO* n = new NODO;
n->key=key;
n->next=n;
n->prev=n;
return n;
}

void list_insert(NODO* &lista,NODO* &x){

lista=x;
}



//-------------------- Nel main ho una chiamata alla funzione list_insert fatta così :


list_insert(A[0],init(ele1)); // con NODO* A[10] e float ele1;


//al momento della chiamata mi appare questo errore :

26 \main.cpp invalid initialization of non-const reference of type 'NODO*&' from a temporary of type 'NODO*'
20 \list.h in passing argument 2 of `void list_insert(NODO*&, NODO*&)'


errore che non mi viene dato se passo il secondo parametro per valore anzichè riferimento. Visto che comunque il secondo parametro è di ingresso/uscita (la seconda funzione non è quella che ho trascritta, la sto solo provando) necessito di passarla per riferimento.

inoltre..se non faccio una chiamata annidata ovvero se faccio prima:

NODO* provaele1=init(ele1);

list_insert(A[0],provaele1);

funziona tutto correttamente anche passando per riferimento il secondo parametro. Da cosa può dipendere?