Problema con struttura

di il
18 risposte

Problema con struttura

Salve a tutti
sto scrivendo una classe numerica ed ho un problema con la struttura del numero.
il numero nella mia classe numerica e strutturato nella seguente maniera
1 bit per il segno.
8 bit per la posizione della virgola.
8 bit per la quantita di byte che devo allocare per porci dentro il numero.
3 bit per la periodicità.
ed un vettote per immagazinare il numero.
adesso non so come dimensionarmi nella maniera corretta il vettore visto che dipende dalla quantita'
esempio di struttura in c++

struct numero {
bool segno;
int8 pv;
int8 inbyte;
bool peridiocita1;
bool peridiocita2;
bool peridiocita3;
int8 valore[inbyte]; }
non credo che l'ultima riga sia corretta cosi come è
sarei grato a chiunque riuscisse a darmi una mano.

18 Risposte

  • Re: Problema con struttura

    Devi usare un puntatore a int8 e poi allocare/deallocare nel costruttore/distruttore
  • Re: Problema con struttura

    Grazie per la risposta
    il puntatore deve essere esterno o interno alla struttura?
    cioè
    struct numero {
    bool segno;
    int8 pv;
    int8* inbyte;
    bool peridiocita1;
    bool peridiocita2;
    bool peridiocita3;
    int8 valore[inbyte]; }
    oppure
    
    struct numero {
    bool segno;
    int8 pv;
    int8 inbyte;
    bool peridiocita1;
    bool peridiocita2;
    bool peridiocita3;
    int8 valore[pippo]; }
    e la variabile pippo
    int8* pippo;
    me la definisco all'interno della funzione.
  • Re: Problema con struttura

    No, non hai capito. Penso che Oregon volesse dire che non devi dichiarare valore come un array, ma devi dichiararlo come puntatore ad int8 e nel costruttore allocarlo dinamicamente (in C++ usi new), della dimensione che preferisci nel tuo caso pippo.

    Ovviamente se lo allochi nel costruttore devi anche deallocarlo nel distruttore.
  • Re: Problema con struttura

    Esatto ... Nosba ha intesto correttamente (del resto smalldragon, quel codice che hai proposto non è compilabile, non ha senso ...)
  • Re: Problema con struttura

    Quindi se ho capito bene,giusto per essere sicuro, e come se avessi 1 struttura e un normalissimo vettore int8
    la prima
    
    struct numero {
    bool segno;
    int8 pv;
    int8 inbyte;
    bool peridiocita1;
    bool peridiocita2;
    bool peridiocita3;
    int8* valore; }
    e poi il puntatore lo faccio puntare al vettore giusto?
  • Re: Problema con struttura

    Sì, il suggerimento era questo. Ma aggiungo che, se usi una classe (come hai detto nel primo post) non vedo perché usare anche la struct.
  • Re: Problema con struttura

    Grazie per il chiarimento
    per l'organizzazione interna delle varie funzioni in fase di stesura della classe.
    fondamentalmente per evitare di perdermi qualche pezzo per strada!
  • Re: Problema con struttura

    Non ha senso quello che dici. Non devi usare la struttura nella classe.
  • Re: Problema con struttura

    Dimenticavo una cosa
    ma in fase di allocazione posso usare una variabile o devo usare una costante ?
    cioè
    
    {
    attributo = new numero;
    // riempio i vari campi che posso riempire
    for (int i=0;i<attributo.inbyte;i++)
        {  cifra = new int8[i];
           cifra[i]=0; }
           attributo.valore = & cifra[0];
    }       
    
    oppure nel ciclo for al posto di attributo.inbyte devo mettere un valore costante?
  • Re: Problema con struttura

    Ma tu conosci il C/C++ ? Scusa ma da quello che scrivi mi sembra che devi prima rivedere le basi del linguaggio e solo dopo affrontare il progetto.

    Che senso ha infilare nel ciclo la

    cifra = new int8;

    ???

    Che senso ha quel ciclo ???

    Devi allocare lo spazio una sola volta PRIMA di eventuali cicli con una semplice

    attributo.valore = new int8 [attributo.inbyte];

    OVVIAMENTE attributo.inbyte deve essere valorizzato correttamente PRIMA della new
  • Re: Problema con struttura

    Il senso è che avevo capito che la struttura era una cosa e il vettore da collegare era un altra!
    cosi nel ciclo mi allocavo il vettore esterno.
    mi ero dimenticato che i vettori si allocavano in una volta sola!
    scusami ma in attributo.valore non andava il puntatore al vettore?
    mentre cosi attributo.valore diventa esso stesso un vettore, che è meglio, ma allora non capisco il perchè nella struct lo dichiaro semplice puntatore.
  • Re: Problema con struttura

    No ... nel ciclo tu non allocavi UN solo vettore ma TANTI vettori con un numero sempre maggiore di elementi, che non è la cosa giusta (fra l'altro usando

    cifra

    che non so cosa sia).
    in attributo.valore non andava il puntatore al vettore? mentre cosi attributo.valore diventa esso stesso un vettore
    Che vuoi dire??

    Ripeto ... tu non hai le basi del C. Il puntatore punta al primo elemento del vettore allocato dinamicamente ... Non si capiscono i tuoi dubbi.

    E ancora una volta, non ha senso usare una struct se stai creando una classe apposita e lavori in C++ ...
  • Re: Problema con struttura

    Lo so che allocavo un vettore scalare me ne sono reso conto solo dopo che lo avevo scritto.
    comunque adesso penso di aver capito.
    scusa ma perchè, secondo te, non ha senso usare una struct in una classe?
    comunque quando avrò terminato di testare tutte le funzioni la levo ci metterò un bel pò ma alla fine ci riuscirò.
  • Re: Problema con struttura

    smalldragon ha scritto:


    un vettore scalare
    Mah ... non esiste il concetto di "vettore scalare", anzi è proprio un controsenso ... comunque ...
    scusa ma perchè, secondo te, non ha senso usare una struct in una classe?
    Non è che non si usa in assoluto, ma per quello che devi fare tu non serve. Crei una classe numero con i suoi membri privati
    
    class numero
    {
    private:
      bool segno;
      int8 pv;
      int8 inbyte;
      bool peridiocita1;
      bool peridiocita2;
      bool peridiocita3;
      int8 *valore;
      
      ...
    
    e così via.
Devi accedere o registrarti per scrivere nel forum
18 risposte