Questo il codice completo:
emplace o non emplate, std::unique_ptr<Materiale> mat; o std::unique_ptr<Materiale> mat(NULL); o std::unique_ptr<Materiale> mat();codice:#include <iostream> #include <vector> #include <memory> 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 { std::unique_ptr<Materiale> mat; //inizio costruttori e funzioni public: Nodo() { } /**/ double get_E() { return mat->get_E(); } void set_materiale(Materiale &m){ mat.reset(&m); } }; 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<Elemento> elemento; std::vector<Acciaio> acciaio; elemento.emplace_back(Elemento()); elemento[0].nodo.emplace_back(Nodo()); elemento[0].nodo.emplace_back(Nodo()); for(int i=0;i<elemento.size();i++) { for(int k=0;k<elemento[i].nodo.size();k++) { acciaio.emplace_back(Acciaio()); elemento[i].nodo[k].set_materiale(acciaio[i]); } } 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; }
non funziona... (fate un rapido copia e incolla per vedere!) ... io proprio non so' più che santi chiamare!
non ho mai perso tanto tempo dietro a un problema come questa volta...![]()
Nella realtà è tanto semplice: Tanti oggetti che contengono tanti oggetti che possono collegarsi ad altri oggetti (diversi, la cui classe madre è la classe Materiale).


Rispondi quotando