Se vuoi correggere quello ci vuole un cast su b2 e b3 ...
... riesci da solo? ;)
Se usi
Veicolo, a questo punto pero' non e' piu' una buona idea usare "anche" Atemp ... perche' fai un fai un giro vizioso...
Nel senso che
Veicolo e' genitore di
Auto e
Moto ... e se inizializzi
Auto, inizializzi anche
Veicolo, ma non viceversa... e tu adesso hai inizializzato
Veicolo... con
Atemp inizializzeresti
Auto e (un altro)
Veicolo... per poi reinizializzare un'altra
Automobile (e un altro
Veicolo)
Quindi se percorri questa nuova strada, ti consiglio di non usare piu'
Atemp... e di fare direttamente l'inizializzazione con:
C:
try{
G.Immetti(new Automobile(Vtemp.get_Nometipo(), Vtemp.get_Marca(), /* col cast */ b2));
}
catch(Errore e){
cout<<e.what()<<endl;
}
Aiuto sul cast:
Vedi che tipo di dato e' il terzo parametro di Automobile, e fai il cast di b2 a quel tipo di dato
--- i due messaggi sono stati uniti ---
Fino adesso ti sto dicendo come "risolvere" i problemi, ma vedo che hai molta confuzione.
Quello che hai scelto, non e' il metodo migliore... mi riferisco al fatto di inizializzare una classe "madre" ed utilizzarla per inizializzare la classe "figlio" (che a sua volta inizilaizza un'altra classe "madre").
La cosa piu' "elegante", proposta da te, e discussa fin ora, era la funzione
Copia ... che serviva per acquisire gli input e inizializzare
Automobile/
Moto
(e la puoi usare anche a "monte" della scelta auto/moto, come adesso stai usando
Veicolo).
Un altro metodo che ti accenno
(solo!) e':
C:
Automobile *auto = new Automobile;
// poi acquisici gli input e usi set_Nometipo(), set_Marca()... etc per definire i membri di "auto"
// ed infine la "immetti" nel "garage"
Gli altri sono dei metodi per evitare di usare gli oeratori di allocazione/deallocazione dinamica (sia con gli "array" che con le classi)... e si vede!!! ... nel senso che il professore lo notera'.
Comunque faccio veramente fatica a leggere il codice, è identato malissimo.
Inoltre non dovresti utilizzare DevC++ perché non più supportato.
Ti sta dicendo semplicemente che non riesce a trovare una funzione Parcheggio::Automobile(const char *, const char *, Parcheggio::buffer)
, quindi il problema sta tra gli argomenti della chiamata, ed esso è buffer. Se invece di passargli buffer passi &buffer[0] il problema dovrebbe risolversi.
Inoltre non ti servono 77 buffer, te me basta uno. E in più vista la scelta di un veicolo temporaneo implementerei un costruttore rvalue reference per utilizzare std::move()
Fai benissimo a dirgli cosa sarebbe meglio usare!
Il fatto e' che quelle classi gli sono state fornite come "libreria", quindi non possono essere modificate... tutt'al piu' puo' derivarsi una propria classe... ma credo che l'argomento classi sia stato appena introdotto, e ne stia acquisendo i primi mneccanismi.
Oltretutto, come hai notato, e' ancora indeciso sull'allocazione dinamica e sulla visibilita' delle variabili locali, e non credo sia ancora in grado di "derivarsi" una classe atta a gestirsi le proprie necessita.
Ma poi le classi sono fatte "bene" (o meglio, adatte allo scopo), hanno costruttori, operatori di copia... etc... solo che non utilizzano la "std"... perche' probabilmente non 'e' stata ancora introdotta nel corso.
Credo che sia cosi' anche per cio' che riguarda il DevC++, immagino che sia stato anche quello un "input" del corso.
Ovviamente se vorra' fare domando riguardo altri compilatori, saremo ben lieti di fornigli risposte ;) ... ma quello iniza ad essere un desiderio personale, che va al di la' della necessita' di "far funzionare" un esercizio.
P.S.
Inizio a darti ragione anche per i "cin.ignore()" che qui dovrebbero essere usati SOLO prima di un cin.getline() ... non sono inutili, ma qui vengono messi un po' ovunque... :D