PDA

View Full Version : [C++]costruttori


giulioballio
18-07-2007, 21:50
premetto che potete pure ignorare i tipi che sono definiti da una libreria a elmenti finiti perché la mia domanda è puramente relativa al funzionamento dei costruttori in C++

quale potrebbe essere la differenza fra:

MyClass::MyClass(Mesh& mesh) :

mesh(mesh),
astress()
{ Function S(mesh, s, astress); }

e:

MyClass::MyClass(Mesh& mesh) :

mesh(mesh),
astress()
S(mesh, s, astress) { }

avendo dichiarato:

Function S;
Mesh& mesh;
Vector s;
FooBilinearForm astress;

nel secondo caso ho un segmentation fault, nel primo no.. grazie dell'aiuto!

Ufo13
19-07-2007, 09:43
Hmm segmentation fault e` un po` generico direi... Che compilatore usi? Immagino gcc?

giulioballio
19-07-2007, 14:11
Hmm segmentation fault e` un po` generico direi... Che compilatore usi? Immagino gcc?

grazie per la risp innanzitutto!
compilo sotto ubuntu e uso g++

Ufo13
19-07-2007, 21:17
gcc fa scherzetti ogni tanto...

Così a prima occhiata penso potrebbe essere la initialiser list che fa casino (mesh nominata due volte).. Prova anominarle diversamente magari.

Altra cosa... Le variabili ufficialmente non sono inizializzate nello stesso ordine in cui appaiono nella initialiser list, ma nell'ordine in cui vengono dichiarate nella classe.. Quindi è possibile che effettivamente tu stia inizializzando S con qualcosa di non inizializzato..

giulioballio
20-07-2007, 11:01
gcc fa scherzetti ogni tanto...

Così a prima occhiata penso potrebbe essere la initialiser list che fa casino (mesh nominata due volte).. Prova anominarle diversamente magari.

Altra cosa... Le variabili ufficialmente non sono inizializzate nello stesso ordine in cui appaiono nella initialiser list, ma nell'ordine in cui vengono dichiarate nella classe.. Quindi è possibile che effettivamente tu stia inizializzando S con qualcosa di non inizializzato..

era proprio così grazie! mi era sfuggito che avevo le dichiarato le variabili Function proprio prima di astress.. grazie!!