Errori di compilazione

di il
3 risposte

Errori di compilazione

Ho copiato questo programma di esempio da un libro che sto studiando, il problema è che dev-c non me lo compila, trova i seguenti errori nella funzione copy:


c\1\externlongestline\externlongestline.cpp In function 'void copy()':
41 15 c\1\externlongestline\externlongestline.cpp [Error] new declaration 'void copy()'
7 6 c\1\externlongestline\externlongestline.cpp [Error] ambiguates old declaration 'char copy()'
44 18 c\1\externlongestline\externlongestline.cpp [Error] type mismatch with previous external decl of 'char line []' [-fpermissive]
4 6 c\1\externlongestline\externlongestline.cpp [Error] previous external decl of 'char line [1000]' [-fpermissive]
44 29 c\1\externlongestline\externlongestline.cpp [Error] type mismatch with previous external decl of 'char longest []' [-fpermissive]
5 6 c\1\externlongestline\externlongestline.cpp [Error] previous external decl of 'char longest [1000]' [-fpermissive]
ecco il programma:
#include <stdio.h>
#define MAXLINE 1000 /* lunghezza massima di una linea */
int max; /* massima lunghezza trovata sinora */
char line[MAXLINE]; /* linea di input corrente */
char longest[MAXLINE]; /* linea più lunga salvata qui */
int getline(void);
char copy(void);
/* stampa la linea di input più lunga; seconda versione */
main()
{
int len;
extern int max;
extern char longest[MAXLINE];
max=0;
while ((len=getline())>0)
if (len>max)
{
max=len;
copy();
}
if (max>0) /* c’era almeno una linea in input */
printf("%s", longest);
return 0;
}
/* getline: seconda versione */
int getline(void)
{
int c, i;
extern char line[MAXLINE];
for (i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='\n'; ++i)
line[i]=c;
if (c=='\n')
{
line[i]=c;
++i;
}
line[i]='\0';
return i;
}
/* copy: seconda versione */
void copy(void)
{
int i;
extern char line[], longest[];
i=0;
while ((longest[i]=line[i])!='\0')
++i;
}
dov'è l'errore?

3 Risposte

  • Re: Errori di compilazione

    Prova con questo codice... ho soltanto rinominato la funzione getline e poi ho sistemato il tipo della funzione void ( credo fosse una void).
    Il problema è che la getline è una funzione che esiste già in stdio.h :
    
    /* Like `getdelim', but reads up to a newline.
    
       This function is not part of POSIX and therefore no official
       cancellation point.  But due to similarity with an POSIX interface
       or due to the implementation it is a cancellation point and
       therefore not marked with __THROW.  */
    extern _IO_ssize_t getline (char **__restrict __lineptr,
    			    size_t *__restrict __n,
    			    FILE *__restrict __stream) __wur;
    
    #include <stdio.h>
    #define MAXLINE 1000 /* lunghezza massima di una linea */
    int max; /* massima lunghezza trovata sinora */
    char line[MAXLINE]; /* linea di input corrente */
    char longest[MAXLINE]; /* linea più lunga salvata qui */
    int Getline(void);
    void copy(void);
    /* stampa la linea di input più lunga; seconda versione */
    int main()
    {
    int len;
    extern int max;
    extern char longest[MAXLINE];
    max=0;
    while ((len=Getline())>0)
    if (len>max)
    {
    max=len;
    copy();
    }
    if (max>0) /* c’era almeno una linea in input */
    printf("%s", longest);
    return 0;
    }
    /* Getline: seconda versione */
    int Getline(void)
    {
    int c, i;
    extern char line[MAXLINE];
    for (i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='\n'; ++i)
    line[i]=c;
    if (c=='\n')
    {
    line[i]=c;
    ++i;
    }
    line[i]='\0';
    return i;
    }
    /* copy: seconda versione */
    void copy(void)
    {
    int i;
    extern char line[], longest[];
    i=0;
    while ((longest[i]=line[i])!='\0')
    ++i;
    }
    
  • Re: Errori di compilazione

    Scaricati code::blocks,copiaci il codice dentro e scoprirai in un nanosecondo che il nome copy risulta ambiguo e quindi è meglio rinominarlo, che il prototipo non corrisponde alla funzione, che se non metti "void main()" (perdipiu errato) ma "main()" di default i compilatori fanno "int main" e quindi si aspettano il return,e dato che sono anche cordiali ti avvisano che "main" si aspetta un int.
    Quindi per favore DISINSTALLA quel coso chiamato dev+schifezza e installa un qualsiasi altro ide vedrai che farai meno fatica a individuare gli errori!
  • Re: Errori di compilazione

    Ho iniziato a programmare la settimana scorsa, è l'unico compilatore che ho provato, ma se dici che non è buono è meglio se provvedo subito a cambiarlo
    grazie del consiglio, ora provo code::blocks
Devi accedere o registrarti per scrivere nel forum
3 risposte