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);
}
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;
    }
}
Vi ringrazio ^_^