Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    uso del typedef per dichiarare un array di struct

    Salve ragazzi, provando a fare uno degli esercizi del prof sono inceppato in un problema.
    Dovrei creare un array di struct, io ho pensato di utilizzare le typedef scrivendo il seguente codice
    -----------------------------------------------------------
    #define NMAX 100

    typedef struct dati {
    int eta;
    char sesso;
    } sdati;

    typedef sdati vett[NMAX];
    ------------------------------------------------------------
    ma il compilatore mi dai problemi(uso dev c++) sulla dichiarazione di vett, dice
    "forbids declaration of vett with no type".
    potete darmi qualche suggerimento su come fare???

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    codice:
    typedef struct dati {
    int eta;
    char sesso;
    } sdati;
    
     sdati vett[NMAX];//typedef non ci vuole sdati è gia un tipo
    Tecnologia

  3. #3
    grazie per l'aiuto, ma io voglio definire proprio un tipo vett con dimensione [NMAX] in modo da dichiarare le variabili cosi
    vett VS, VM, VF;
    ho provato a scrivere il codice cosi
    codice:
    typedef struct dati {
                        int eta;
                        char sesso;
                        } vett[NMAX];
    ma il compilatore da sempre lo stesso errore

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    typedef struct
     {
              int eta;
              char sesso;
      } vett1;
    typedef struct
    {
            vett1[NMAX];
    }vett2;

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,284

    Moderazione

    Originariamente inviato da salvatore991
    uso del typedef per dichiarare un array di struct
    Il linguaggio va indicato anche nel titolo, come da Regolamento (qui l'ho corretto io), e il codice va formattato inserendolo nel tag [CODE].

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    hola

    citazione:

    grazie per l'aiuto, ma io voglio definire proprio un tipo vett con dimensione [NMAX] in modo da dichiarare le variabili cosi
    vett VS, VM, VF;
    ho provato a scrivere il codice cosi


    anche se fosse possibile dichiararle in questo modo vett VS, VM, VF;
    cambierebbe solo la dichiarazione poi dovresti accederci normalmente
    non ti cambia molto scrivere una riga cosi vett VS[100], VM[100], , VF[100];
    Tecnologia

  7. #7
    io avevo pensato di fare in questo modo visto che le dichiarazioni delle variabili e delle funzioni devo farle in un file separato che ho chiamato "funzioni.h".
    quest vettori devo passarli come parametri alle funzioni ma il compilatore mi da errore quando vado a passarli

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Pensandoci molto alla fine una soluzione l' ho trovata,includi nell' header le definizioni dei tipi:

    codice:
    #define NMAX 10
    #define use typedef struct{int eta;char sesso;}vett1;typedef struct{vett1 vett2[NMAX];}vett3;
    use è la parola chiave che ti definisce tutte le definizioni dei tipi,la puoi anche cambiare.
    Basta scrivere in testa al file:
    codice:
    use
    E tu hai automaticamente definito il tipo vett1 e il tipo vett2 e vett3.
    A questo punto però accedere alla struttura non è semplice come prima,devi dichiarare una variabile di tipo vett3 e accedere agli elementi:

    codice:
    vett3 beta;
    beta.vett2[0].sesso='c';
    Il che te lo sconsiglio.
    In effetti il tipo array non è definito in C,questo perchè le dimensioni sarebbero prestabilite.
    Non essendoci i garbage collectors in C è compito del programmatore usare la memoria minima.
    Se poi ti capita spesso di usare il numero NMAX di strutture si che è una convenienza includerlo nell' header.Altrimenti ti ricordo che ci sono anche i puntatori se già li conosci.
    Puoi semplicemente dichiarare la definizione della struttura una volta,poi allocare spazio NMAX volte con calloc.
    Altrimenti includi la definizione nell' header.
    Una soluzione è includere solo vett1 e poi dichiarare nella main un vettore come ad esempio:

    codice:
    vett1 alfa[NMAX];
    Così secondo me è più semplice.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    23
    Ciao scusa ma perchè non evitare l'uso del typedef visto che stai creando una sola nuova struttura e procedere così:
    codice:
    #define NMAX 100
    
    struct dati {
    int eta;
    char sesso;
    };
    
    dati nomevettore[NMAX];
    o volendo puoi usare l'allocazione dinamica:
    codice:
    #define NMAX 100
    
    struct dati {
    int eta;
    char sesso;
    };
    
    dati *nomepuntatoreadati;
    nomepuntatoreadati=new dati[NMAX];

  10. #10
    Originariamente inviato da salvatore991
    io avevo pensato di fare in questo modo visto che le dichiarazioni delle variabili e delle funzioni devo farle in un file separato che ho chiamato "funzioni.h".
    quest vettori devo passarli come parametri alle funzioni ma il compilatore mi da errore quando vado a passarli
    A me non da errori:
    codice:
    /*
    $ g++ --version
    i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646) (dot 1)
    $ g++ -Wall -ansi -pedantic -Wextra -Wconversion main.cpp
    $ ./a.out 
    6
    */
    
    #include <iostream>
    
    const int NMAX=3;
    
    typedef struct dati {
    int eta;
    char sesso;
    } sdati;
    
    typedef sdati vett[NMAX];
    
    namespace ig{
    	int test (vett theVett){
    		int ret = 0;
    		for (int i = 0; i < NMAX; ++i){
    			ret += theVett [i].eta;
    		}
    		return ret;
    	}
    }
    
    int main (void){
    	vett aVett={{1, 'M'}, {2, 'M'}, {3, 'M'}};
    	
    	std::cout << ig::test (aVett) << std::endl;
    	return 0;
    }
    Fornisci un esempio minimalista completo atto a riprodurre il tuo errore.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.