Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797

    [C] Struct, vettore di struct, problemi

    edit: cribbio ho dimenticato il tag
    questa è la parte del codice:
    codice:
    typedef struct
     {
      char cmd[100];
    	int pid;
     } t_figlio;
    
    #define MAX_FIGLI 100
    
    t_figlio figli[MAX_FIGLI];
    int tot=0;
    
    void update_figli(int pid,char * arg){
    int i=0;
    		while(i<MAX_FIGLI && figli[i]!=pid) i++;
    		strcpy(figli[i].cmd,arg);
    }
    
    void init_figli(){
    int i;
    	for(i=0;i<MAX_FIGLI;i++)
    		figli[i].pid=0;
    
    }
    void add_figlio(int pid){
    int i;
    i=0;
    	while(i<MAX_FIGLI && figli[i]!=0) i++;
      figli[i].pid=pid;
    	tot=i;
    }
    
    void rem_figlio(int pid){
    
    int i,k;
    i=0;
    	while(i<MAX_FIGLI && figli[i]!=pid) i++;
    	if (i==tot) exit(-1);
    	 for(k=i;k<tot;k++) {
    		figli[k].pid=figli[k+1].pid;
    		strcpy(figli[k].cmd,figli[k].cmd)
    		}
    	tot--;
    	
    }
    ora, quando compilo dice:

    codice:
    stefano@ubuntu:~/shell$ make
    figli.c:13: error: syntax error before ‘figli’
    figli.c:13: warning: data definition has no type or storage class
    figli.c: In function ‘update_figli’:
    figli.c:19: error: request for member ‘cmd’ in something not a structure or union
    figli.c: In function ‘init_figli’:
    figli.c:25: error: request for member ‘pid’ in something not a structure or union
    figli.c: In function ‘add_figlio’:
    figli.c:32: error: request for member ‘pid’ in something not a structure or union
    figli.c: In function ‘rem_figlio’:
    figli.c:42: error: request for member ‘pid’ in something not a structure or union
    figli.c:42: error: request for member ‘pid’ in something not a structure or union
    figli.c:43: error: request for member ‘cmd’ in something not a structure or union
    figli.c:43: error: request for member ‘cmd’ in something not a structure or union
    figli.c:44: error: syntax error before ‘}’ token
    figli.c: In function ‘jobs’:
    figli.c:54: error: request for member ‘pid’ in something not a structure or union
    figli.c:60: error: request for member ‘cmd’ in something not a structure or union
    figli.c:62: error: request for member ‘cmd’ in something not a structure or union
    figli.c:69: error: request for member ‘cmd’ in something not a structure or union
    figli.c:71: error: request for member ‘cmd’ in something not a structure or union
    make: *** [figli.o] Error 1
    che diavolo vuole?

  2. #2
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    while(i<MAX_FIGLI && figli[i]!=pid) i++;


    figli[i] è una struttura
    pid è un intero

    non ha senso figli[i]!=pid

    sicuramente un errore di distraction

    anzi è stato un pò recitivo ci stà in tutte le funzioni

    non l'ho finito di guardare perchè non so che fà il tuo prog

  3. #3

    Re: [C] Struct, vettore di struct, problemi

    Prima di tutto questo non va bene:
    codice:
    t_figlio figli[MAX_FIGLI];
    davanti devi aggiungere typedef, perchè stai rinominando la struttura t_figlio con un array.

    Inoltre vengono segnalati errori in funzioni che non hai postato.

    Dovresti poi in tutte le funzioni, dichiarare un puntatore all'array figli[MAX_FIGLI] e tramite quello accedere al campo pid o cmd.

    Esempio:
    codice:
    figli *pt;
    (*pt).figli[i].cmd

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: Re: [C] Struct, vettore di struct, problemi

    Originariamente inviato da devil89
    Prima di tutto questo non va bene:
    codice:
    t_figlio figli[MAX_FIGLI];
    davanti devi aggiungere typedef, perchè stai rinominando la struttura t_figlio con un array.
    Non comprendo questa tua affermazione ...

    La dichiarazione va bene cosi' com'e' ... la typedef c'e' ... quindi esiste un nuovo tipo di dato ... si dichiara un array di elementi del nuovo tipo di dato e mi sembra non ci sia problema ...

    Originariamente inviato da devil89
    Dovresti poi in tutte le funzioni, dichiarare un puntatore all'array figli[MAX_FIGLI] e tramite quello accedere al campo pid o cmd.

    Esempio:
    codice:
    figli *pt;
    (*pt).figli[i].cmd
    Anche questo non e' corretto ... la visibilita' dell'array e' globale ...

  5. #5

    Re: [C] Struct, vettore di struct, problemi

    Originariamente inviato da oregon
    Non comprendo questa tua affermazione ...

    La dichiarazione va bene cosi' com'e' ... la typedef c'e' ... quindi esiste un nuovo tipo di dato ... si dichiara un array di elementi del nuovo tipo di dato e mi sembra non ci sia problema ...

    Non c'è la typedef.
    Non capisco come possa essere giusta la scrittura:
    codice:
    t_figlio figli[MAX_FIGLI];
    Lui in quel modo vuole far diventare la struttura t_figlio un array, quindi come può fare senza typedef?

    Io ho sempre usato typedef.

  6. #6
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797

    Re: Re: [C] Struct, vettore di struct, problemi

    Originariamente inviato da devil89
    Non c'è la typedef.
    Non capisco come possa essere giusta la scrittura:
    codice:
    t_figlio figli[MAX_FIGLI];
    Lui in quel modo vuole far diventare la struttura t_figlio un array, quindi come può fare senza typedef?

    Io ho sempre usato typedef.
    il typedef c'è
    codice:
    typedef struct
     {
      char cmd[100];
    	int pid;
     } t_figlio;
    il problema è che mettevo la dichiarazione nel .h e nn me la prendeva perchè mi ero dimenticato l'inculde. e anche i .pid nel ciclo

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: Re: [C] Struct, vettore di struct, problemi

    Originariamente inviato da devil89
    Non c'è la typedef.
    Non capisco come possa essere giusta la scrittura:
    codice:
    t_figlio figli[MAX_FIGLI];
    Lui in quel modo vuole far diventare la struttura t_figlio un array, quindi come può fare senza typedef?

    Io ho sempre usato typedef.
    Guarda che ti stai confondendo ... la typedef esiste eccome ...

    codice:
    typedef struct
    {
      char cmd[100];
      int pid;
    } t_figlio;

  8. #8
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    Forse è più semplice e coerente con il significato della typedef , utilizzare questa notazione

    struct nome_struttura
    {
    ....
    ....
    };

    typedef nome_struttura nome_struttura;


    //dichiarazioni

    nome_struttura myVar;



  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E perche' mai?

    La definizione di un tipo a partire da una struttura anonima e' perfettamente legittima.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    hai provato ad usare -> invece di . (essendo un array, dovrebbe avere più senso...credo)

    codice:
    figli[i]->pid=pid;

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.