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

    [C] multiple definition of 'variabile'

    salve a tutti, il mio first message...

    1. Apro Dev-C++ (l'ultima versione) e scelgo console application
    2. Creo tre file header.h(prototipi), source.c(funzioni) e main.c
    3. Scrivo il codice, premo F9 e mi dà l'errore come sopra.

    codice:
    source.c          multiple definition of  'indice'
              first defined here

    Che sarà? Che sarà???
    [Q.I=0.8] Camill0 [/Q]
    Vivi e lascia vivere. C'è, nel senso che dovresti perlomeno appunto lasciar...vabbè.

  2. #2
    che hai definito piu' volte indice...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    posta il codice e prova ad unire i 2 file .c in uno solo...

  4. #4
    ok.
    Infatti nel source.c vi sono due funzioni entrambe con un ciclo for che utilizzano questa variabile indice, dichiarata nell'header.

    La prima:

    codice:
    struct record *scansione(char *COGNOME, char *NOME, int ETA)
       {
        int INDICE;
        for (INDICE=0; INDICE<=indice; INDICE++)
            {if(strcmp(COGNOME, rubrica[INDICE].cognome)==0)
               if(strcmp(COGNOME, rubrica[INDICE].nome)==0)  
               if(ETA == rubrica[INDICE].eta)
             return(&rubrica[INDICE]);
             }     
        return(NULL);
       }
    La seconda:
    codice:
    void vedirubrica(void)
       {
        int INDICE;
        char pausa;
        struct record *RECORD = &rubrica[0];
        for(INDICE=0; INDICE<indice; INDICE++)
           {vedirecord(RECORD++);
            scanf("%c", pausa);
            }    
        }
    nell'header.h la variabile è cosi dichiarata
    codice:
    int indice = 0;
    - Inserendo tutto il codice nel main và tranquillo.
    - Pare sia un errore noto del Dev (ma nn ne sono sicuro...)
    - ATTENZIONE la variabile in questione è "indice" non "INDICE"

    (volete che vi posti l'intero codice? non so se conviene, è bello lungo...)
    [Q.I=0.8] Camill0 [/Q]
    Vivi e lascia vivere. C'è, nel senso che dovresti perlomeno appunto lasciar...vabbè.

  5. #5

    up

    sarà mica difficile :master:
    [Q.I=0.8] Camill0 [/Q]
    Vivi e lascia vivere. C'è, nel senso che dovresti perlomeno appunto lasciar...vabbè.

  6. #6
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    le variabili sono locali, non dovrebbero dare errori!

  7. #7
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    e se modifichi una delle due: INDICE e indice. potrebbe essere questo...

  8. #8
    ecco l'intero progetto (divertitevi )

    codice:
    /*-----------------------------<| H e a d e r |>-----------------------------*/
    
    #include <stdio.h>          // Per le funzioni Input/Output
    #include <string.h>         // Per le funzioni gets e strcmp
    
    #define MAXREC 30           // Numero massimo di record
    #define MAXCHAR 31          // Lunghezza massima dati record
    
    #define MENU 0              // Opzioni del menu equivalgono-
    #define INS 1               // a costanti. Ad ogni costante viene-
    #define CAN 2               // assegnata un operazione (case).
    #define RIC 3               // Vengono definite nel caso si vogliano-
    #define VIS 4               // modificare i valori delle costanti-
    #define OUT 100             // assegnate ad ogni operazione.
    
    
    
    
    struct record
    { 
     char nome [MAXCHAR];
     char cognome [MAXCHAR];
     char indirizzo [MAXCHAR];
     int eta; 
     };
    
    // Vettore anagrafico di MAXREC record
    struct record rubrica[MAXREC];
    
    // Inizializza anagrafico
    int indice = 0;
    
    // Dichiarazione funzioni
    int menu(void);                                 // Visualizza il menu
    int inserisci(int);                             // Inserisci un record
    void ricerca(void);                             // Ricerca un record
    struct record *scansione(char *, char *, int);  // Avvia ricerca
    void elimina(struct record *);                  // Elimina un record
    void cancella(void);                            // Avvia cancellazione
    void vedirecord(struct record *);               // Visualizza un record
    void vedirubrica(void);                         // Visualizza la rubrica
    
    /*-----------------------------<| S o u r c e |>-----------------------------*/
    
    #include "header.h"         // Include il file header dove sono dichiarate le fx
    
    
    
    
     // MENU - Visualizza il menu
     int menu(void)
     {
      int scelta;
      char invio;
      printf("\n\n\n\n\n\n\n");
      printf(" ******** RUBRICA ********");
      printf("\n -------------------------");
      printf("\n\n 1. Inserisci un record");
      printf("\n\n 2. Cancella un record");
      printf("\n\n 3. Ricerca un record");  
      printf("\n\n 4. Visualizza la rubrica");
      printf("\n\n 0. Esci");
      printf("\n\n\n -> Scegliere un opzione: ");
      scanf("%d", &scelta);
      scanf("%c", &invio);
      printf("\n");
      
      switch(scelta)
      {
       case 0:
       case 1:
       case 2:
       case 3:
       case 4:
        return(scelta);
       default:
       break;
       }
      }    
    
      // INSERISCI - Inserisci un record
      int inserisci(int pos)
      {
       char invio;
       if(pos>=MAXREC)
         {printf(" Anagrafe pieno");
          scanf("%c", &invio);
          return(pos);
          }    
      printf("\nINSERIMENTO RECORD");
      printf("\n------------------\n\n");
      
      printf("\nCognome : ");
      gets(rubrica[pos].cognome);
      
      printf("\nNome : ");
      gets(rubrica[pos].nome);
      
      printf("\nIndirizzo : ");
      gets(rubrica[pos].indirizzo);
      
      printf("\nEta' : ");
      scanf("%d", &rubrica[pos].eta);
      scanf("%c", &invio);
      pos++;
      return(pos);
      }  
      
      // CANCELLA - Elimina un record
      void cancella(void)
      {
       char pausa;
       char cognome[MAXCHAR];
       char nome[MAXCHAR];
       int eta;
       struct record *RECORD;
       
       printf("\n\t\tCANCELLA RECORD");
       printf("\n\t\t------\n\n");
       
       printf("\nCognome : ");
       gets(cognome);
       
       printf("\nNome : ");
       gets(nome);
       
       printf("\nEta' : ");
       scanf("%d", &eta);  
       scanf("%c", &pausa);
       
       RECORD = scansione(cognome, nome, eta);
       if(RECORD == NULL)
         {printf("\nRecord non presente nella rubrica");
          scanf("%c", &pausa);
          return;
          }
      
      // VEDIRECORD - Visualizza un record 
      vedirecord(RECORD);
      printf("\nConfermi cancellazione? (S/N) ");
       scanf("%c", &pausa);
       if(pausa=='S' || pausa=='s')
         {elimina(RECORD);                  // Elimina un record
          return;
          }    
       }     
    
      // ELIMINA - Elimina un record
      void elimina(struct record *p)
      {
       strcpy(p->cognome, "");
       strcpy(p->nome, "");
       strcpy(p->indirizzo, "");
       p->eta = 0;
       }   
      
      // RICERCA - Ricerca record se presente
      void ricerca(void)
      {
       char pausa;
       char cognome[MAXCHAR];
       char nome[MAXCHAR];
       int eta;
       struct record *RECORD;
       
       printf("\n\t\tRICERCA RECORD");
       printf("\n\t\t------\n\n");
       
       printf("\nCognome : ");
       gets(cognome);
       
       printf("\nNome : ");
       gets(nome);
       
       printf("\nEta' : ");
       scanf("%d", &eta);  
       scanf("%c", &pausa);
       
       RECORD = scansione(cognome, nome, eta);
       
       if(RECORD == NULL)                               //Condizione If
         {printf("\nRecord non presente nella rubrica");
          scanf("%c", &pausa);
          return;
          }
       
       vedirecord(RECORD);
       scanf("%c", &pausa);
       }    
       
       // SCANSIONE - Ricerca record con scansione vettoriale
       struct record *scansione(char *COGNOME, char *NOME, int ETA)
       {
        int INDICE;
        for (INDICE=0; INDICE<=indice; INDICE++)
            {if(strcmp(COGNOME, rubrica[INDICE].cognome)==0)
               if(strcmp(COGNOME, rubrica[INDICE].nome)==0)  
               if(ETA == rubrica[INDICE].eta)
             return(&rubrica[INDICE]);
             }     
        return(NULL);
       }   
       
       // VEDIRECORD - Visualizza un record
       void vedirecord(struct record *p)            
       {
        printf("\n\n------------------\n");
        printf("\n\t\tCognome : %s", p->cognome);
        printf("\n\t\tNome : %s", p->nome);
        printf("\n\t\tIndirizzo : %s", p->indirizzo);
        printf("\n\t\tEta' : %d", p->eta);
        printf("\n\n------------------\n");
        }    
       
       // VEDIRUBRICA - Visualizza l'intera rubrica
       void vedirubrica(void)
       {
        int INDICE;
        char pausa;
        struct record *RECORD = &rubrica[0];
        for(INDICE=0; INDICE<indice; INDICE++)
           {vedirecord(RECORD++);
            scanf("%c", pausa);
            }    
        }   
    
    /*-------------------------------<| M a i n |>-------------------------------*/
    #include <stdio.h>          // I/O
    #include <string.h>         // Per le funzioni gets e strcmp
    #include "header.h"         // Include il file header dove sono dichiarate le fx
    
    
    
    
    main()
    {
     int scelta = MENU;                             // Dichiara scelta uguale a 0
     while(scelta!=OUT)                             // Quando scelta diverso da 100
     {
      switch(scelta)
      {
          case MENU:                                // Caso 0 (Fine)
          scelta = menu();
          if(scelta == MENU)                        // Se scelta uguale a 0
            {scelta = OUT; }                        // Scelta diventa uguale a 100
          break;
      
          case INS:                                 // Caso 1 (Inserisci)
          indice = inserisci(indice);
          scelta = MENU;                            // Scelta azzerato
          break;
      
          case CAN:                                 // Caso 2 (Cancella)
          cancella();
          scelta = MENU;                            // Scelta azzerato
          break;
          
          case RIC:                                 // Caso 3 (Ricerca)
          ricerca();
          scelta = MENU;                            // Scelta azzerato
          break;
          
          case VIS:                                 // Caso 4 (Visualizza rubrica)
          vedirubrica(); 
          scelta = MENU;                            // Scelta azzerato
          break;
          }                                         // Fine switch
     }                                              // Fine while
    }
    Originariamente inviato da unit1
    e se modifichi una delle due: INDICE e indice. potrebbe essere questo...
    naaaa, il c in teoria distingue Maiuscole/Minuscole. Non credo...
    [Q.I=0.8] Camill0 [/Q]
    Vivi e lascia vivere. C'è, nel senso che dovresti perlomeno appunto lasciar...vabbè.

  9. #9
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    Gli errori ci sono ma con lcc mi compila

    ti riporto gli errori:

    lcc
    codice:
    C:\..\>lc progetto.c main.c
    Warning progetto.c: 32  missing return value
    Warning progetto.c: 172  possible usage of pausa before definition
    0 errors, 2 warnings
    Warning main.c: 8  no type specified. Defaulting to int
    0 errors, 1 warnings
    main.obj: multiple definition of _indice
    first definition is in file progetto.obj
    cancello i file e provo con gcc:
    codice:
    C:\...\...>gcc -o progetto.exe progetto.c main.c
    C:\DOCUME~1\...\IMPOST~1\Temp/ccSoaaaa.o(.bss+0x0):main.c: multiple definition
     of `indice'
    C:\DOCUME~1\...\IMPOST~1\Temp/ccYjaaaa.o(.bss+0x0):progetto.c: first defined h
    ere

    oltre al fatto che se li unisci in un solo file funziona.

    ci do un altra occhita...

  10. #10
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    codice:
          indice = inserisci(indice);
    deve esserre questa, non accetta questa e quella dichiarata nel file .h, puoi cambiarla?

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.