Ciao a tutti ragazzi
sono di nuovo qui a chiedere una mano a voi più esperti.

Attualmente sto studiando le classi ma dato che gli ADT me li ricordo un giorno si e uno no avevo deciso di farmi un esercizietto al giorno per arrivare (si spera) all'esame a conoscerli come se fossero i miei migliori amici (che depressione detta cosi).

Ho però un problema, ovvero il linker mi da un casino di errori sul main.o (dove richiamo la lista). Premetto che ho usato i namespace (cosi tanto per fare una cosa in più.)

Il programma si compone di studenti.h, strudenti.cpp, listaS.h, listaS.cpp ed ovviamente main.cpp. Ve li riporto di seguito:

studenti.h
codice:
#ifndef _STUDENTI_H_
#define _STUDENTI_H_

#include <iostream>
#include <cstdlib>

using namespace std;

namespace students {
	
	typedef char stringa [20];
	
	struct Stud {
		
		stringa matricola;
		int esami;
		
	};
	
	void insert (Stud & );
	void stampa (const Stud & );
}
	
		

#endif

studenti.cpp
codice:
 
#include "studenti.h"

using namespace students;

void insert (Stud & st) {
	
	cout << "\nMatricola: " ;
	cin.ignore();
	cin.getline(st.matricola, 21) ;
	
	cout << "\nEsami: " ;
	cin  >> st.esami;
	
}


void stampa (const Stud & st) {
	
	cout << "\nMatricola: " << st.matricola;
	cout << "\nEsami: " << st.esami;
	
}
listaS.h
codice:
 
#ifndef _LISTAS_H_
#define _LISTAS_H_

#include <iostream>
#include <cstdlib>
#include "studenti.h"

using namespace std;
using namespace students;

namespace LS {
	
    struct Lista;
    typedef Lista * ptr;

    struct Lista {
	
	    Stud s;
	    ptr next;
	
    };

    void start (ptr & );
	bool full (ptr & );
	bool empty (ptr & );
    void push (ptr &, const Stud & );
    void pop (ptr &, Stud & );
    void top (const ptr & );
    void append (ptr &, const Stud & );
    void print (const ptr & );
    void destroy (ptr & );
}

listaS.cpp
codice:
 
#include "listaS.h"

using namespace LS;


void start (ptr & l) {l=0;}
bool full (ptr & l) {return false;}
bool empty (ptr & l) {return (l==0);}

void push (ptr & l, const Stud & st) {
	
	ptr q;
	q = new Lista;
	q->s=st;
	q->next=l;
	l=q;
	
}
	

void pop (ptr & l, Stud & st) {
	
	st=l->s;
	ptr temp;
	temp=l;
	l=l->next;
	delete temp;
	
}
	

void append (ptr & l, const Stud & st) {
	
	ptr temp;
	temp=l;
	while (temp->next) temp=temp->next->next;
	ptr q;
	q=new Lista;
	q->s=st;
	q->next=0;
	temp->next=q;
}
	
	
void print (const ptr & l){
	
	ptr temp=l;
	while (temp->next)
		stampa (temp->s);
}

void destroy (ptr & l) {
	
	ptr temp=l;
	while (temp->next)
		delete temp->next->next;
	delete l;
	
}
main.cpp
codice:
 #include "listaS.h"
using namespace LS;


int main () {
	
	ptr studenti;
	Stud stu;
	
	cout << "\nstart!";
	start(studenti);
	
	system ("PAUSE");
	
	if(!full(studenti)) {
	cout << "\npush!";
	insert (stu);
	push (studenti, stu);
	}else cout << "\nPiena!";
	
	system ("PAUSE");
	
	if (!full(studenti)){
	cout << "\nappend!";
	insert (stu);
	append(studenti,stu);
	}else cout << "\nPiena!";
	
	system ("PAUSE");
	
	if(!empty(studenti)){
	cout << "\npop!";
	pop (studenti,stu);
	stampa (stu);
	}else cout << "\nVuota!";
	
	system ("PAUSE");
	
	cout << "\nprint!";
	print (studenti);
	
	system ("PAUSE");
	
	cout<< "\ndestroy!";
	destroy (studenti);
	
	system ("PAUSE");

    return 0;
}

Gli errori che mi riporta il linker sono i seguenti:
"LS:rint(LS::Lista* const& )", referenced from:
_main in main.o
"LS::destroy(LS::Lista*& )", referenced from:
_main in main.o
"LS:op(LS::Lista*&, students::Stud& )", referenced from:
_main in main.o
"students::insert(students::Stud& )", referenced from:
_main in main.o
_main in main.o
"LS:ush(LS::Lista*&, students::Stud const& )", referenced from:
_main in main.o
"students::stampa(students::Stud const& )", referenced from:
_main in main.o
print(LS::Lista* const& )in listaS.o
"LS::append(LS::Lista*&, students::Stud const& )", referenced from:
_main in main.o
"LS::empty(LS::Lista*& )", referenced from:
_main in main.o
"LS::start(LS::Lista*& )", referenced from:
_main in main.o
"LS::full(LS::Lista*& )", referenced from:
_main in main.o
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Build failed (10 errors)


Mentre il compilatore (ovviamente) non mi dà problemi.