PDA

Visualizza la versione completa : [c++] Funzioni di array bidimensionali


TheDark191
18-11-2010, 23:05
Scusate sono di nuovo io ^^".Vorrei fare una funzione in cui dichiaro un array bidimensionale,ma nel farlo esce l'errore:
"declaration of `parola' as multidimensional array must have bounds for all dimensions except the first " xk?
l'errore me lo da proprio all'inzio,quando dichiaro la funzione.Io l'ho dichiarata in questo modo

int sposta_parola(char parola[][],int n);

Ippo343
18-11-2010, 23:21
Perch se dichiari un'array multidimensionale, come dice chiaramente l'errore del compilatore, devi obbligatoriamente dare un limite per tutte le dimensioni (ad eccezione della prima).
Questo perch ogni volta che allochi un array il compilatore necessita di sapere quanto grande ogni elemento dell'array: in questo caso, tu stai dichiarando un array di array, quindi devi specificarne la dimensione.

Dato che una stringa un char*, puoi risolvere il problema semplicemente cos:

int sposta_parola(char* parole[], int n)

dove parole dichiarato come un array di char*, ovvero stringhe (nota che anche l'argomento argv del main si dichiara cos).
In generale, se devi passare un array bidimensionale di cui non conosci le dimensioni fai:

tipo* matrix[]
oppure

tipo** matrix

Entrambe queste scritture funzionano anche con pi dimensioni:

int*** matrix[]

Ricordati per che ora ogni elemento dell'array solo un puntatore, che non punta a niente finch non gli assegni un'area di memoria.

TheDark191
18-11-2010, 23:35
dichiarando un numero costante come array bidimensionale mi avvia la funzione,mentre se faccio come hai detto (char* array[]) mi da un errore quando lo inserisco nel main.Precisamente questo errore "In function `int main(int, char**)':
cannot convert `char*' to `char**' for argument `1' to `void sposta_parola(char**, int)'"

dov il problema? forse sbaglio ad inserire la variabile tra le parentesi tonde?

Celebron
19-11-2010, 18:04
potresti postare la chiamata della funzione (e come hai dichiarato i parametri che passi) e il prototipo della stessa cos come li hai scritti dopo la correzione?

TheDark191
20-11-2010, 01:17
allora visto che il mio scopo e spostare una stringa alla fine dell'array che la contiene,ho costruito la funzione cos:



char sposta_parola(char parola[][17],int n){
for (int i=0;i<strlen(parola[n]);i++){
for(int j=0;j<strlen(parola[n+1]);j++){
parola[n+i][j]=parola[n+i+1][j];
}
}
}



in questo modo non ho problemi di compilazione e visto che le parole non sono maggiori di 17 caratteri non mi crea problemi.
Solo che l'algoritmo non funziona bene...le parole ad un certo punto si accavallano e non posso riutilizzarle una volta spostate.Sapresti dirmi dove sbaglio? :stordita:

Ippo343
20-11-2010, 07:22
n il numero di parole nell'array: quindi parole[n] non esiste, e tantomento parole[n+1] o parole[n+i+1].

In ogni caso dato che un'array di stringhe ti consiglio vivamente ti uniformarti alla (sensata) convenzione che un'array di stringhe un array di char* invece di una matrice di char.

TheDark191
20-11-2010, 11:29
no scusa ho sbagliato a non precisare.n la posizione della parola che sta nella matrice.Ho dovuto fare una matrice proprio perch una stringa un array e io ho bisogno di un array di stringhe quindi un array di array.Ripeto la funzione viene compilata e funziona,la parola viene effettivamente spostata.Ma se riutilizzo la matrice una volta spostate tutte le parole,queste sono cambiate e ci sono dei caratteri strani che non appartengono alla parola e neanche alla matrice

parole[n] la parola che si trova nella ennesima posizione nella matrice.

TheDark191
20-11-2010, 12:23
sono riuscito a risolvere il problema.Ho trovato lo sbaglio! grazie di tutto ^^

Loading