Salve a tutti.
Come da titolo, quando vado a creare un'istanza di una classe ottengo un segment fault e non ne sto riuscendo a venire a capo.
Vi allego il sorgente dei .cpp nella speranza che possiate farmi capire dove e cosa sto sbagliando.
Vi avviso che sono un novizio in C++, infatti lo trovo molto diverso da Java... Già il fatto di dover avere un costruttore, eventualmente vuoto, per passare gli oggetti mi infastidisce xD
Ecco i sorgenti:
codice:/* * File: main.cpp * Author: Amministratore * * Created on 30 ottobre 2012, 22.58 */ #include <iostream> #include "Persona.h" #include <string> #include <sstream> using namespace std; /* * */ int main() { string nome, cognome, dataStr; int data[3], i=0; cout << "Inserisci il nome: "; cin >> nome; cout << "Inserisci il cognome: "; cin >> cognome; cout << "Inserisci la data di nascita (gg/mm/aaaa): "; cin >> dataStr; istringstream stream(dataStr); while(!stream.eof()){ string app; getline(stream, app, '/'); data[i++]=atoi(app.c_str()); } Data d(data[0], data[1], data[2]); Persona p(nome, cognome, d); cout << endl << "Nome: " << p.getNome() << endl << "Cognome: " << p.getCognome() << endl; cout << "Data di nascita: " << d.getGiorno() << "/" << d.getMese() << "/" << d.getAnno() << endl; cout << "Età: " << p.calcolaEta() << " anni." << endl; return EXIT_SUCCESS; }codice:/* * File: Persona.cpp * Author: Amministratore * * Created on 30 ottobre 2012, 22.18 */ #include "Persona.h" #include <ctime> void Persona::ridimensionaStringa(string& var, string ass){ if(ass.size()>MAX_LENGTH){ ass.resize(MAX_LENGTH); var=ass; }else{ var=ass; } } Persona::Persona(string n, string c, Data dn){ ridimensionaStringa(nome, n); ridimensionaStringa(cognome, c); dataNascita=dn; } Persona::~Persona(){ delete this; } string Persona::getNome() const{ return nome; } string Persona::getCognome() const{ return cognome; } Data Persona::getDataNascita() const{ return dataNascita; } void Persona::setNome(string nn){ nome=nn; } void Persona::setCognome(string nc){ cognome=nc; } void Persona::setDataNascita(Data ndn){ dataNascita=ndn; } int Persona::calcolaEta() const{ time_t tempoCorrente; tm *dataNascitaConv=new tm(); time(&tempoCorrente); dataNascitaConv->tm_mday=dataNascita.getGiorno(); dataNascitaConv->tm_mon=dataNascita.getMese()-1; dataNascitaConv->tm_year=dataNascita.getAnno()-1900; float differenza=difftime(tempoCorrente, mktime(dataNascitaConv)); return (int)differenza/(60*60*24*365); }Vi ringrazio ^_^codice:/* * File: Data.cpp * Author: Amministratore * * Created on 30 ottobre 2012, 21.51 */ #include "Data.h" #include <iostream> #include <cstdlib> using namespace std; bool Data::checkAnno(int a) const{ return a>=ANNO_MIN && a<=ANNO_MAX; } bool Data::checkGiorno(int g) const{ return g>=GIORNO_MESE_MIN && g<=GIORNO_MAX; } bool Data::checkMese(int m) const{ return m>=GIORNO_MESE_MIN && m<=MESE_MAX; } Data::Data(int g, int m, int a){ if(checkGiorno(g) && checkMese(m) && checkAnno(a)){ giorno=g; mese=m; anno=a; }else{ cerr << "Data non valida!" << endl << "Il programma verrà terminato!"; exit(EXIT_FAILURE); } } Data::Data(){} Data::~Data(){ delete this; } int Data::getGiorno() const{ return giorno; } int Data::getMese() const{ return mese; } int Data::getAnno() const{ return anno; } void Data::setGiorno(int ng){ if(checkGiorno(ng)){ giorno=ng; }else{ cerr << "Giorno non valido!" << endl << "Il giorno non è stato modificato!" << endl; } } void Data::setMese(int nm){ if(checkMese(nm)){ mese=nm; }else{ cerr << "Mese non valido!" << endl << "Il mese non è stato modificato!" << endl; } } void Data::setAnno(int na){ if(checkAnno(na)){ anno=na; }else{ cerr << "Anno non valido!" << endl << "L'anno non è stato modificato!" << endl; } }

Rispondi quotando
e comunque in Java non sono necessari i costruttori di copie perché si passa tutto per riferimento, cosa che puoi tranquillamente fare anche in C++.
