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 ^_^