Raga vi mostro questo codice che ho scritto in C++:
codice:
//header file
#ifndef LISTE_H
#define LISTE_H
#include <iostream>
using namespace std;
class Liste {
public:
    void crealista();
    void stampalista(struct numeri);
private:
    struct numeri
    {
        int x;
        numeri* nodo;
    };
};

#endif // LISTE_H
codice:
//source file
#include "Liste.h"
#include <iostream>
using namespace std;

void Liste::crealista()
{
    int y;
    numeri* q=NULL;
    q=new numeri;
    q->nodo=NULL;

    cout << "Premi 1 per inserire un numero, altrimenti premi 0 " << endl;
    cin >> y;
    cout << endl;

    while(y==1)
    {
     q->nodo=NULL;
     int m;
     cout << "Inserisci il numero da salvare " << endl;
     cin >> m; cout << endl;
     numeri* p2=NULL;
     p2=new numeri;
     p2->x=m;
     p2->nodo=q;
     q=p2;
     cout << "Premi 1 per inserire un numero, altrimenti premi 0 " << endl;
     cin >> y;
     cout << endl;
    }
    numeri* m=q;
    stampalista(m);

}

void Liste::stampalista(numeri m )
{
    while(m!=NULL)
    {
     cout << m->x << endl;
     m=m->nodo;
    }
}
La funzione stampa lista mi dà sempre errore in quanto non riesco a passargli bene la struct m. Qual'è il codice corretto per passare bene la lista? Inoltre, come si fà a passare la lista per valore (in modo che crei una copia invece di modificarmi il valore della lista originale) e per riferimento (in modo da, per esempio, una volta che ho creato la lista posso passarla per mettere in coda per esempio)?

Grazie in anticipo