Salve a tutti. Fra pochi giorni ho un esame di C++ e vorrei chiedervi aiuto per la correzzione di un programma:
[CODE]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
//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:
Quando vado ad eseguire il driver_rivista mi dà una marea di undefined references..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; }
![]()
![]()
![]()
Se qualcuno di voi avrà la pazienza di aiutarmi con questo problema gli sarò molto grato!!!

Rispondi quotando
