Salve a tutti sto scrivendo un programma di decodifica dei file JPEG. Per far questo ho creato una classe che si dedica alla scansione del file alla ricerca dei marker e ad ogni marker trovato crea sul momento l'istanza di una nuova classe dedicata alla sua interpretazione.

lo pseudo codice è circa questo:
codice:
// Classe ScanHeader

fstream in("file.jpg", ios::in | ios::binary);
while(!eof){
  WORD marker = in.leggiMarker();
  switch(marker){
      case M1:
         {
           // Chiamo la classe M1 che gestisce i marker di tipo M1 col costruttore
            M1 emme1(in);
          }
           break;
      case M2:
         {
           // Chiamo la classe M2 che gestisce i marker di tipo M2 col costruttore
            M2 emme2(in);
          }
           break;
etc...
  }


}
Il problema è che la classe ScanHeader che fa questo lavoro ha bisogno di alcuni dati delle classi che sono invocate man mano, che in questo caso verrebbero distrutte perché istanziate dentro lo switch case. Allora ho messo come variabili della classe ScanHeader le classi di cui mi servono i dati (M1, M2 etc), e poi provo a fare una copia ma i risultati sono un SIGSEV.

Sarebbe inoltre più comodo per me se riuscissi a invocare il costruttore di queste classi (che ha bisogno di un filestream con la testina settata nel punto giusto, cioè nello switch case e non prima) ma una cosa del tipo
codice:
nel file ScanHeader.hpp:
M1 emme1;
nel file ScanHeader.cpp:
case M1:
emme1(in);
non funziona.
Ho provato infine a mettere nella definizione di ScanHeader solo un dato, e poi a copiare solo quello dentro, ma ottengo sempre SIGSEV.

Spero di essere stato chiaro e chiedo il vostro aiuto oramai sono senza idee