Sto sviluppando il progettino per l'esame di informatica2, l'obiettivo è quello di mettere in piedi una specie di gioco funzionante da linea di comando per interagire con un ambiente composto da stanze e oggetti di vario tipo.
Sono arrivato a programmare il tipo Porta, derivato di Apribile e Passaggio, che a loro volta derivano dalla classe base Oggetti.
Nella classe Stanza istanzio un vector di oggetti Porta (vett_porte), per avere elenco porte disponibili e poter gestire il passaggio in un'altra stanza. Per popolare vett_porte ho la funzione membro ins_porte:
codice:
Stanza& Stanza::ins_porte(porta& p)
{ vett_porte.push_back(p);
return *this; }
Nel main istanzio un oggetto di tipo personaggio, una classe i cui membri privati sono la posizione dell'omino nella stanza e quale sia la stanza corrente. Le sue funzioni membro gestiscono gli input da tastiera (del genere vai a nord, guarda stanza ecc.). Quando istanzio personaggio passo per riferimento al costruttore la stanza di partenza, in questo caso è st1.
Riassumendo, questo è il main:
codice:
Stanza st1("corridoio iniziale","descr.breve st1","descr.lunga st1",70,20);
porta s1_p1(0,20,0,0,0,"nome","descrizione");
st1=st1.ins_porte(s1_p1);
Personaggio pers(st1);
Gli argomenti numerici di st1 indicano le dimensioni della stanza. Per quanto riguarda la porta s1_p1 "0,20" indica la posizione e "0,0,0" lo stato (aperta/chiusa ecc).
Veniamo al problema: a compiletime non vengono rilevati errori, che invece si verificano a runtime (msg: si è verificato un errore in prog.exe. L'applicazione verrà chiusa). Se elimino la chiamata alla funzione ins_porte il programma gira. Ma gira anche se provo ad eliminare l'istanza dell'oggetto di tipo Personaggio, cioè esegue correttamente l'inserimento delle porte nel vector.
Potete aiutarmi?
Scusate per la lunghezza