Ho praticamente riscritto tutto il programma, perchè effettivamente non aveva molto senso. La funzione stampa(), però, presenta tuttora delle imprecisioni; dopo aver fatto l'apposito debug, come giustamente consigliato da MacApp, gli errori sono di sicuro nelle righe 48 e 51. Visualizzo in output dei numeri a caso, anzichè i numeri da me inseriti..
Questo è il codice ora:
codice:
#include <iostream.h>

class BOX {
  public:
    int a;           // Numero inserito dall'utente nella lista
    BOX *next;   // Puntatore al prossimo elemento
    BOX *start;
    BOX *last;

    BOX(void) { int a = 0; next = NULL; start = NULL; last = NULL; }   // Costruttore
    void setDato(int);
    void stampa(void);
    ~BOX(void);
};

void BOX::setDato(int a)
{
   BOX *temp;
     
   if (start == NULL) {
     temp = new BOX;
     start = temp;
     last = temp;
   } else {
             temp = new BOX;
             last->next = temp;
             last = temp;
     }
}

void BOX::stampa(void)
{
   BOX *temp = start;
     
   if (temp == NULL)
     cout << "La lista e' vuota!\n\n";
     else {
             cout << "Gli elementi della lista sono : \n";
             while (temp->next != NULL) {
               cout << temp << "\n";
               temp = temp->next;
               cout << temp->a << "\n";
             }
     }
}

BOX::~BOX(void)
{
   cout << "BOX destructor speaking : \n\n";
   start = NULL;
   last = NULL;

   if (start != NULL && next != NULL)
     cerr << "Error: Trying to destroy a non-empty BOX!\n\n";
}

main()
{
   int n = 0;
   BOX box;
   int choice = 0;

   BOX();

   do {
         cout << "--------------------------------------------------------------------------\n";
         cout << "                               LISTA LINKATA                              \n";
         cout << "--------------------------------------------------------------------------\n\n";
         cout << "Digita : 1) per inserire un elemento nella lista;\n";
         cout << "2) Stampare la lista;\n"; 
         cout << "0) Uscire dal programma.\n\n";
         cout << "Effettua una scelta: ";
         cin >> choice;

         switch (choice) {
           case 1 :
             cout << "Inserisci un numero da aggiungere alla lista : ";
             cin >> n;
             cout << "\n\n";
             box.setDato(n);
             break;

           case 2 :
             box.stampa();
             break;

           case 0 :
             cout << "Exiting program!\n\n";
             break;

           default :
             cout << "Sorry! Bad menu selection!\n\n";
             break;
         }
   } while (choice != 0);
return 0;
}