Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24

    [C] expected ‘)’ before ‘*’ token

    ciao a tutti,
    ho iniziato a studiare da poco il linguaggio C pertanto premetto che il mio problema potrà sembrare stupido a molti di voi ma per imparare bisogna pur partire dal fondo.
    Sto studiando le strutture dati e in questo momento sto cercando di imparare come funzionano le liste.
    Sto realizzando un semplice programma che costruisce una lista e ne conta gli elementi mediante una funzione (vi posto il codice):

    codice:
    [list=1][*] #include <stdio.h>[*] #include <stdlib.h>[*][*] /*DICHIARAZIONE FUNZIONE*/[*] int conta();[*][*] int main(void)[*] { [*]    int i, numero;[*][*]    /*CREAZIONE DI UNA LISTA CONTENENTE I PRIMI 10 NUMERI PARI*/[*]    typedef struct nodo[*]    {[*]       int value;[*]       struct nodo *next;[*]    }Nodo;[*][*]    Nodo *p, *L;[*]    [*]    p = (Nodo *)malloc(sizeof(Nodo));[*]    p->value = 2;[*]    p->next = NULL;[*]    L = (Nodo *)malloc(sizeof(Nodo));[*]    L->value = 4;[*]    L->next = NULL;[*]    p->next = L;[*]    for(i = 3; i <= 10; i++)[*]    {[*]       L->next = (Nodo *)malloc(sizeof(Nodo));[*]       L = L->next;[*]       L->value = 2 * i;[*]    }[*] [*]    numero = conta(p);[*][*]    printf("Nella lista sono presenti %d elementi\n", numero);[*]    return(0);[*] }[*][*] /*DEFINIZIONE DELLA FUNZIONE*/[*] int conta(Nodo *L)[*] {[*]    int quanti = 0;[*]    [*]    while(L != NULL)[*]    {[*]       quanti++;[*]       L = L->next;[*]    }[*][*]    return(quanti);[*] }[/list=1]
    Quando vado a compilare gcc ritorna il seguente errore:
    error: expected ')' before '*' token
    alla riga 41.
    Ho cercato ovunque ma non ce l'ho fatta a risolvere, spero che qualcuno possa aiutarmi.
    Grazie

  2. #2

    Re: [C] expected ‘)’ before ‘*’ token

    che cos'è Nodo? In quel punto il compilatore mica lo sa. Quello che hai definito dentro la "main", non è visibile fuori.
    In più la dichiarazione della funzione "conta", non è identica alla sua definizione.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24
    Si lo so che ciò che definisco all'interno del main non è visibile fuori però la lista viene definita e creata all'interno del main, quando richiamo la funzione conta gli viene passata la lista (il primo elemento) e pensavo che venisse trattata esattamente come il passaggio di una variabile. Mi consigli di provare a definire la struttura al di fuori del main?
    Nodo è un nome scelto per il nuovo tipo definito con typedef (questo è un semplice programma a scopo didattico per imparare, avrei potuto mettere qualunque cosa al posto di Nodo). Per quanto riguarda la dichiarazione lo so che non sono uguali ma mi sembra di ricordare (non vorrei dire una cavolata) che in C nelle dichiarazioni i parametri delle funzioni sono opzionali.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24
    Ciao MacApp,
    avevi ragione se definisco la struttura all'esterno del main la compilazione va a buon fine senza segnalare errori. Grazie mille per la dritta.
    Ora però ho un altro problema: quado lancio in esecuzione il programma questo mi ritorna che la lista ha zero elementi. Eppure la lista dovrebbe venire creata e popolata mediante il ciclo for, sono abbastanza sicuro di questo perchè ho scritto un altro programmino simile a questo dove però gli elementi non vengono contati tramite una funzione ma internamente al main e così funziona correttamente.
    Questo mi fa pensare che sia la funzione "conta" che non va bene ma prorpio non riesco a capire dov'è l'errore.

  5. #5
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao ... Sicuro che non ti dia un errore di segmentation fault ??? No perché la lista viene concatenata bene (e la funzione conta svolge appieno il suo dovere) però hai dimenticato di settare il puntatore next dell' ultimo elemento della lista a NULL ...Qundi ripeto ... Sei sicuro che la funzione conta restituisce 0????
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24
    ciao krow,
    scusami ma nel primo messaggio ho sbagliato a scrivere e mi sono perso un riga, comunque il settaggio a null nel programma c'è, ti riposto la porzione di codice corretta:

    codice:
    ....
    
    p = (Nodo *)malloc(sizeof(Nodo));
    p->value = 2;
    p->next = NULL;
    L = (Nodo *)malloc(sizeof(Nodo));
    L->value = 4;
    L->next = NULL;
    p->next = L;
    for(i = 3; i <= 10; i++)
    {
       L->next = (Nodo *)malloc(sizeof(Nodo));
       L = L->next;
       L->value = 2 * i;
    }
    L->next = NULL;
    
    numero = conta(p);
    
    ....
    mi ero perso quella riga quando ho postato il codice sul forum ma in realtà da me c'è sempre stata.
    Niente da fare, così mi ritorna sempre un numero di elementi pari a 0. Se invece effettuo il conteggio degli elementi all'interno del main con un semplice "while" tutto funziona correttamente.
    Perchèèèèèèè?????

  7. #7
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Scusa ma a scanzo di equivoci, potresti provare questo codice??
    codice:
    #include <stdio.h>
      #include <stdlib.h>
      typedef struct nodo
         {
            int value;
            struct nodo *next;
         }Nodo;
       /*DICHIARAZIONE FUNZIONE*/
      int conta( Nodo* );
       int main(void)
      { 
         int i, numero;
          /*CREAZIONE DI UNA LISTA CONTENENTE I PRIMI 10 NUMERI PARI*/
         Nodo *p, *L;
         p = (Nodo *)malloc(sizeof(Nodo));
         p->value = 2;
         p->next = NULL;
         L = (Nodo *)malloc(sizeof(Nodo));
         L->value = 4;
         L->next = NULL;
         p->next = L;
         for(i = 3; i <= 10; i++)
         {
            L->next = (Nodo *)malloc(sizeof(Nodo));
            L = L->next;
            L->value = 2 * i;
         }
         L->next = NULL;
         numero = conta(p);
         printf("Nella lista sono presenti %d elementi\n", numero);
         return(0);
      }
       /*DEFINIZIONE DELLA FUNZIONE*/
      int conta(Nodo *L)
      {
         int quanti = 0;
         
         while(L != NULL)
         {
            quanti++;
            L = L->next;
         }
          return(quanti);
      }
    Ti anticipo che l' ho compilato e non mi da nessun problema ...
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    24

    [C] expected ‘)’ before ‘*’ token [RISOLTO]

    grazie mille Krow!
    Ora funziona perfettamente, era sbagliata la dichiarazione.
    grazie grazie grazie a tutti!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.