[C++] aiuto errore codice.
Il problema richiedeva di scrivere un programma che restituisse il valore massimo di di un vettore di lunghezza N (a piacere) in maniera ricorsiva. Purtroppo il compilatore mi segnala un errore e non capisco cosa io abbia sbagliato. L'errore segnalato è:
Line Col
4 11 [Error] expected ',' or '...' before numeric constant
5 27 [Note] in expansion of macro 'N'
Ecco il codice:
Line Col
4 11 [Error] expected ',' or '...' before numeric constant
5 27 [Note] in expansion of macro 'N'
Ecco il codice:
#include <iostream> #include <cstdlib> using namespace std; #define N 9 int max_array(int v[],int N) { if (N<0) return 0; int t=max_array(&v[1],N-1); if (t>v[0]) return t; else return v[0]; } int main() { int v[N],i,max; cout << "\nInserire " << N+1 << " numeri: \n"; for (i=0;i<10;i++) cin >> v[i]; max=max_array(v,N); cout << "\nil valore massimo inserito e': " << max; cout << "\n\nFINE ELABORAZIONE----------------\n\n"; system ("PAUSE"); return 0; }
Risposte
È importante imparare a leggere e comprendere gli errori che il compilatore ti segnala.
> 4 11 [Error] expected ',' or '...' before numeric constant
Linea 4, colonna 11 -> errore: mi aspettavo di trovare una virgola o ... prima di una costante numerica
> 5 27 [Note] in expansion of macro 'N'
Linea 5, colonna 27: nota -> nell'espansione della macro N
Ora guarda il tuo codice.
Hai definito una macro, N, tramite la direttiva al preprocessore #define.
È importante che tu capisca che il preprocessore è un software che viene invocato prima del compilatore ed il suo compito è espandere le macro e fare altre semplici operazioni di controllo e inclusione.
Non ha alcuna conoscenza della semantica del tuo codice. Semplicemente sostiuisce le macro dove le trova.
Ora, tu hai definito la macro N -> valore 9
Subito dopo definisci una funzione, il cui secondo parametro è N.
Il preprocessore passa -> la dichiarazione della funzione diventa
Così come nella riga successiva ed ovunque tu abbia utilizzato il carattere N. Da questo deriva il tuo errore in fase di compilazione.
Per risolvere, semplicemente cambia il parametro N della tua funzione con un altro valore che non verrà sostituito dal preprocessore.
> 4 11 [Error] expected ',' or '...' before numeric constant
Linea 4, colonna 11 -> errore: mi aspettavo di trovare una virgola o ... prima di una costante numerica
> 5 27 [Note] in expansion of macro 'N'
Linea 5, colonna 27: nota -> nell'espansione della macro N
Ora guarda il tuo codice.
Hai definito una macro, N, tramite la direttiva al preprocessore #define.
È importante che tu capisca che il preprocessore è un software che viene invocato prima del compilatore ed il suo compito è espandere le macro e fare altre semplici operazioni di controllo e inclusione.
Non ha alcuna conoscenza della semantica del tuo codice. Semplicemente sostiuisce le macro dove le trova.
Ora, tu hai definito la macro N -> valore 9
Subito dopo definisci una funzione, il cui secondo parametro è N.
Il preprocessore passa -> la dichiarazione della funzione diventa
int max_array(int v[], int 9)
Così come nella riga successiva ed ovunque tu abbia utilizzato il carattere N. Da questo deriva il tuo errore in fase di compilazione.
Per risolvere, semplicemente cambia il parametro N della tua funzione con un altro valore che non verrà sostituito dal preprocessore.
Grazie per la spiegazione, sei stato molto chiaro
