Salve a tutti. Fra pochi giorni ho un esame di C++ e vorrei chiedervi aiuto per la correzzione di un programma:

codice:
//File Rivista.h

#ifndef RIVISTA_H
#define RIVISTA_H

#include <iostream>
#include <string>
#include <vector>
#include "Data.h"

using namespace std;

class Autore
{
public:
	Autore(string n);
	string Nome() const { return nome; }
	private:
	string nome;
};

class Articolo
{
public:
	Articolo(string t, int p);
	string Titolo() const { return titolo; }
	void AggiungiAutore(Autore* a);
	int VediPagine() { return pagine; }
private:
	string titolo;
	vector<Autore*> autori;
	int pagine;
};

class Fascicolo
{
public:
	Fascicolo(Data d);
	void AssegnaPagina(Articolo* a);
	void InserisciArticolo(Articolo* a);
	int NumArticoli() const { return articoli.size(); }
	Data VediData() const { return data; }
	void EliminaArticolo(Articolo* a);
private:
	int TrovaArticolo(Articolo* a);
	int uscita;
	Data data;
	vector<Articolo*> articoli;
	vector<int> pagine_iniziali;
};

class Rivista
{
friend ostream& operator<<(ostream& os, const Rivista& r);
public:
	Rivista(string n);
	string Nome() const { return nome; }
	bool VerificaPubblicazione(Fascicolo* f);
	int TrovaFascicolo(Fascicolo* f);
	void InserisciFascicolo(Fascicolo* f);
	void EliminaFascicolo(Fascicolo* f);
private:
	string nome;
	vector<Fascicolo*> fascicoli;
};

#endif
[CODE]
//File Rivista.cpp

#include "Rivista.h"

Autore::Autore(string n) : nome(n)
{}

Articolo::Articolo(string t, int p) : titolo(t)
{
pagine = p;
}

void Articolo::AggiungiAutore(Autore* a)
{
autori.push_back(a);
}

Fascicolo::Fascicolo(Data d) : data(d)
{}

int Fascicolo::TrovaArticolo(Articolo* a)
{
for (unsigned i = 0; i < articoli.size(); i++)
if(articoli[i] == a)
return i;
return -1;
}

void Fascicolo::AssegnaPagina(Articolo* a)
{
int i = pagine_iniziali.size();
if(i > 0)
pagine_iniziali[i] = pagine_iniziali[i-1] + a->VediPagine();
else
pagine_iniziali[0] = 1;
}

void Fascicolo::InserisciArticolo(Articolo* a)
{
articoli.push_back(a);
AssegnaPagina(a);
}

void Fascicolo::EliminaArticolo(Articolo* a)
{
int j = TrovaArticolo(a);
articoli.erase( articoli.begin()+j );
pagine_iniziali.pop_back();
for (unsigned i = 0; i < articoli.size(); i++)
AssegnaPagina(articoli[i]);
}

Rivista::Rivista(string n) : nome(n)
{}

bool Rivista::VerificaPubblicazione(Fascicolo* f)
{
int i = fascicoli.size();
if ( f->NumArticoli() > 2 && fascicoli[i-1]->VediData() < f->VediData() )
return true;
return false;
}

void Rivista::InserisciFascicolo(Fascicolo* f)
{
assert(VerificaPubblicazione(f));
fascicoli.push_back(f);
}

int Rivista::TrovaFascicolo(Fascicolo* f)
{
for(unsigned i = 0; i < fascicoli.size(); i++)
if(f == fascicoli[i])
return i;
return -1;
}

void Rivista::EliminaFascicolo(Fascicolo* f)
{
int i;
assert( i == (fascicoli.size() - 1));
fascicoli.pop_back();
}

ostream& operator<<(ostream& os, const Rivista& r)
{
os << "La rivista ha pubblicato i seguenti fascicoli: " <<endl;
for(unsigned i = 0; i < r.fascicoli.size(); i++)
os << r.fascicoli[i] << " in data: " << r.fascicoli[i]->VediData() << endl;
return os;
}

E qui ecco il main che ho creato per provare quanto sopra riportato:
codice:
// File driver_rivista.cpp

#include<iostream>
#include "Rivista.h"

int main()
{
	Rivista r1("Rizzi's Scientifics");
	Autore p1("Pillin"), p2("Micoli"), p3("Glutine");
	Articolo a1("Preflop Basics",10), a2("Downswing period",20), a3("Tells",45), a4("Hold'em for Buddies",50);
	
	a1.AggiungiAutore(&p1);
	a1.AggiungiAutore(&p2);
	a2.AggiungiAutore(&p1);
	a2.AggiungiAutore(&p3);
	a3.AggiungiAutore(&p1);
	a3.AggiungiAutore(&p3);
	a4.AggiungiAutore(&p1);
	a4.AggiungiAutore(&p2);
	
	Data pubbl1(15,7,2009), pubbl2(15,9,2009), pubbl3(15,12,2009), pubbl4(1,1,2005);

	Fascicolo f1(pubbl1), f2(pubbl2), f3(pubbl3), f4(pubbl4);
	
	f1.InserisciArticolo(&a1);
	f1.InserisciArticolo(&a2);
	f1.InserisciArticolo(&a3);
	f2.InserisciArticolo(&a2);
	f2.InserisciArticolo(&a3);
	f2.InserisciArticolo(&a4);
	f3.InserisciArticolo(&a2);
	f3.InserisciArticolo(&a4);
	f4.InserisciArticolo(&a1);
	f4.InserisciArticolo(&a2);
	f4.InserisciArticolo(&a4);
	
	r1.InserisciFascicolo(&f1);
	r1.InserisciFascicolo(&f2);
	r1.InserisciFascicolo(&f3);
	
	cout << r1 << endl;
}
Quando vado ad eseguire il driver_rivista mi dà una marea di undefined references..



Se qualcuno di voi avrà la pazienza di aiutarmi con questo problema gli sarò molto grato!!!