Ciao a tutti.
In questo semplice programma ottengo un segmentation fault (11) quando viene allocato l'oggetto della classe Molla:
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:#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; }
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; }; #endifGrazie,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); }
R.

Rispondi quotando
