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!!!