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.