Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [c++] Funzioni di array bidimensionali

    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);

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    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ì:
    codice:
    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:
    codice:
    tipo* matrix[]
    oppure
    codice:
    tipo** matrix
    Entrambe queste scritture funzionano anche con più dimensioni:
    codice:
    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.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  3. #3
    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?

  4. #4
    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?

  5. #5
    allora visto che il mio scopo e spostare una stringa alla fine dell'array che la contiene,ho costruito la funzione così:

    codice:
    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?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    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.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  7. #7
    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.

  8. #8
    sono riuscito a risolvere il problema.Ho trovato lo sbaglio! grazie di tutto ^^

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 © 2024 vBulletin Solutions, Inc. All rights reserved.