Ciao gente, ho cercato di focalizzare il più possibile un problema che mi si è presentato:
Perchè se commento la riga il codice funziona e se la decommento non funziona più? Come posso risolvere tale problema volendo avere potenzialemente infiniti elementi con un certo numero di nodi ciascuno alla quale è associato un materiale?codice:#include <iostream> #include <vector> using namespace std; class Materiale { public: virtual double get_E() { return 0.; } }; class Acciaio : public Materiale { double E; public: Acciaio(){ E=210000.; } double get_E(){ return E; } }; /* eventuale altro materiale*/ /*class Acciaio2 : public Materiale { double E; public: Acciaio(){ E=100000.; } double get_E(){ return E; } }; */ class Nodo { Materiale* m; //inizio costruttori e funzioni public: Nodo() { } /**/ Materiale* get_materiale(){ return m; } double get_E() { return m->get_E(); } void set_materiale(Materiale &mat){ m = &mat; } }; class Elemento { public: std::vector<Nodo> nodo; //inizio costruttori e funzioni public: Elemento() { } double get_E() { double E=0.; for(int i=0;i<nodo.size();i++){ E=E+nodo[i].get_E(); } return E/nodo.size(); } }; int main() { std::vector<Acciaio> acciaio; std::vector<Elemento> elemento; elemento.push_back(Elemento()); elemento[0].nodo.push_back(Nodo()); //elemento[0].nodo.push_back(Nodo()); //commentando questa riga funziona, togliendo il commento non funziona for(int i=0;i<elemento.size();i++) { for(int k=0;k<elemento[i].nodo.size();k++) { acciaio.push_back(Acciaio()); elemento[i].nodo[k].set_materiale(acciaio.back()); } } for(int i=0;i<elemento.size();i++) { for(int k=0;k<elemento[i].nodo.size();k++) { std::cout<<elemento[i].nodo[k].get_E()<<"\n"; } } return 0; }
(e' all'incirca l'ultimo topic da me aperto, ma in versione più concreta e ridotta all'osso, così da dover essere più semplice per qualche esperto rispondere oltre ad essere un caso più semplicemente estensibile. Nel caso fosse ritenuto un messaggio doppio prego il moderatore di chiudere o eliminare l'altro topic)