Conflitto di tipi

di il
4 risposte

Conflitto di tipi

Compilando
void stats(float [], int, float, float, float);
void stats(float v[], int brasa, float *p1, float *p2, float *p3){

	[...]

}
Ho il seguente messaggio:
Prova.c:2: error: conflicting types for 'stats'
Prova.c:1: note: previous declaration of 'stats' was here
Come mai? Eppure i tipi di parametri riportati nella dichiarazione sono gli stessi di quelli della definizione. Lo so che in questo caso non è necessaria la dichiarazione della procedura ma basta solo la definizione, ciò non toglie che quell'errore non dovrebbe apparire! Come si può spiegare ed ovviare a ciò senza eliminare la dichiarazione?

4 Risposte

  • Re: Conflitto di tipi

    Poiche' il file ha estensione ".c", stai compilando il file con le regole del linguggio C, e non del C++.

    Il "C" non supporta l'overloading!

    Se vuoi compilare con le regole del "C++", il file deve avere estensione ".cpp"
  • Re: Conflitto di tipi

    E' vero che in C l'overloading non è ammesso, ma questo non è un overloading! La prima riga di codice è una dichiarazione, la seconda è una definizione della stessa procedura. In più non c'è nessun conflitto di tipi perché sono gli stessi sia per la dichiarazione, sia per la definizione.
  • Re: Conflitto di tipi

    Risolto:
    void stats(float [], int, float *, float *, float *);
    void stats(float v[], int brasa, float *p1, float *p2, float *p3){
    
          [...]
    
    }
  • Re: Conflitto di tipi

    Eppure i tipi di parametri riportati nella dichiarazione sono gli stessi
    Non era vero ... quindi era un overloading ... non ammesso.
Devi accedere o registrarti per scrivere nel forum
4 risposte