Hola a tod@s, ya se que hay muchos manuales de C/C++, pero por mucho que busco me sigue fallando este metodo. Os lo pego

colae colae :: Aniadir(colae *enColar,avion *nuevo)
{

if (enColar->esVacia())
{
enColar->prim = nuevo;
enColar->ult = nuevo;
enColar->prim->sig=NULL;
enColar->ult->sig=NULL;
printf("Añadir: Acabo de agregar el primer nodo\n");
cout<<"ID_AVION: " << " " << enColar->ult->getID_Avion() << "\n";
cout<<"FUEL: " << " " << enColar->ult->getFuel() << "\n";
cout<<"PISTA: " << " " << enColar->ult->getPista() << "\n";
cout<<"TERMINAL: " << " " << enColar->ult->getTerminal() << "\n";
return *enColar;
}
else
{
enColar->ult->sig=nuevo;
enColar->ult=nuevo;
enColar->ult->sig=NULL;
return *enColar;
}
}

es la tipica funcion de Añadir Nodo a la Cola, por mucho que lo intento, inserta el primero y a continuacion lo machaca y el ptr primero y ptr ultimo es el mismo, no veo mi error, ¿me podeis echar una manita?
Muchas gracias