Ciao a tutti.
In questo semplice programma ottengo un segmentation fault (11) quando viene allocato l'oggetto della classe Molla:
codice:
#include "Gravita.h"
#include "IntegratoreEulero.h"
#include "Molla.h"
#include <iostream>
using std::cout;
using std::endl;
int main()
{
Gravita g({0,0,-9.81}, 0);
cout << "Campo di gravita:" << endl;
cout << g << endl;
Molla M({0.4},{0},0.1,0.1,{0,0,0},{0,0,1},{0,1,-1},1.38165,0.01);
g.agisci_su(M);
cout << "\nMolla:" << endl;
cout << M << endl;
return 0;
}
Mi sono scervellato un po' ma proprio non capisco da dove possa venire. Il problema però é in quella classe perché le altre le ho testate tutte piuttosto a fondo e hanno sempre funzionato... Allego quindi la definizione di tale classe:
codice:
#ifndef MOLLA_H
#define MOLLA_H
#include "OggettoMobile.h"
class Molla : public OggettoMobile
{
public:
// --- COSTRUTTORI ---
Molla(const Vettore&, const Vettore&, double, double, const Vettore&, const Vettore&, const Vettore&, double, double = 0, double = 1, double = 1);
Molla(const vector&, const vector&, double, double, const vector&, const vector&, const vector&, double, double = 0, double = 1, double = 1);
Molla(const list&, const list&, double, double, const list&, const list&, const list&, double, double = 0, double = 1, double = 1);
// --- METODI ---
Vettore evoluzione() const;
void stampa(std::ostream&) const;
Vettore get_posizione() const;
Vettore get_velocita() const;
protected:
// --- ATTRIBUTI ---
Vettore origine;
Vettore direzione;
double k;
double b;
private:
// --- METODI ---
Vettore unitario(const Vettore&) const;
Vettore unitario(const vector) const;
Vettore unitario(const list) const;
};
#endif
codice:
#include "Molla.h"
// *** PUBLIC ***
// --- COSTRUTTORI ---
Molla::Molla(const Vettore& p, const Vettore& v, double r, double m, const Vettore& f, const Vettore& O, const Vettore& d, double k, double b, double a, double mu)
: OggettoMobile(p,v,r,m,f,a,mu), origine(O), direzione(unitario(d)), k(k), b(b)
{}
Molla::Molla(const vector& p, const vector& v, double r, double m, const vector& f, const vector& O, const vector& d, double k, double b, double a, double mu)
: OggettoMobile(p,v,r,m,f,a,mu), origine(O), direzione(unitario(d)), k(k), b(b)
{}
Molla::Molla(const list& p, const list& v, double r, double m, const list& f, const list& O, const list& d, double k, double b, double a, double mu)
: OggettoMobile(p,v,r,m,f,a,mu), origine(O), direzione(unitario(d)), k(k), b(b)
{}
Vettore Molla::evoluzione() const
{
Vettore r( (1 / massa) * (forza * direzione - k * omega[0] - b * omega_[0]) );
return r;
}
void Molla::stampa(std::ostream& out) const
{
OggettoMobile::stampa(out);
out << direzione << " # direzione" << std::endl;
out << k << " # k" << std::endl;
out << b << " # b" << std::endl;
}
Vettore Molla::get_posizione() const
{
return origine + omega[0] * direzione;
}
Vettore Molla::get_velocita() const
{
return omega_[0] * direzione;
}
// *** PRIVATE ***
// --- METODI ---
Vettore Molla::unitario(const Vettore& V) const
{
return (1 / V.norma()) * V;
}
Vettore Molla::unitario(const vector V) const
{
Vettore r(unitario(V));
return std::move(r);
}
Vettore Molla::unitario(const list V) const
{
Vettore r(unitario(V));
return std::move(r);
}
Grazie,
R.