|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2002
Città: ...diciamo Pisa
Messaggi: 1282
|
[principiante] Primo problema...
Ho iniziato oggi a fare il mio programmino in C++, ma il compilatore mi da un errore: Il testo è il seguente:
#include <iomanip.h> #include <iostream.h> void printm( int[][]); int main() { int x,y; int matrix[21][21]; for(int t=0; t<=20; t++) for(int r= 0; r<=20; r++) matrix[t][r]=0; //Azzeramento ARRAY cout<<"Ho creato una matrice 20x20, seleziona un punto di partenza(X,Y):\n"; cout<<"\nX => "; cin>>x; while(x>20 || x<1) { cout<<"\nValore scorretto.RIPROVA:\nX => "; cin>>x; } cout<<"\nY => "; cin>>y; while(y>20 || y<1) { cout<<"\nValore scorretto.RIPROVA:\nY => "; cin>>y; } cout<<"\n\nUsa, sul tastierino, 8 4 6 2 per muoverti, 5"; cout<<"\nper alzare abbassare la penna.\n"; enum status{UP, DOWN}; matrix[x][y]=1; void printm(int matr[][]) { for(int i=1; i<=21; i++) for(int u=1; u<=21; u++) { if(matr[i][u]==0)cout<<" "<<" "; else cout<<"*"<<" "; cout<<"\n"; } } printm(matrix); return 0; } COSA SBAGLIO ???? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Almeno due errori formali.
Innanzitutto non puoi dichiarare un parametro di una funzione come array generico multidimensionale (come int [][]). Poi non puoi implementare una funzione dentro un'altra funzione.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2002
Città: ...diciamo Pisa
Messaggi: 1282
|
e se io volessi implementare una classe che modifichi (in questo caso stampi) un array multidimensionale come posso fare se non posso usare questo array come parametro??
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Devi fornire informazioni sulla dimensione dell'array, oppure implementare una classe array apposita.
E' ovvio che dichiarare un array bidimensionale senza limiti non è ammissibile: i valori vengono memorizzati in sequenza dentro una struttura monodimensionale (la memoria), quindi se non sai quanto è lunga una riga come fai ad accedere ad una determinata colonna? Dichiarare il parametro come int ar[][21] (oppure int ar[21][], ora non so quale formalismo è quello giusto) fornisce al compilatore le informazioni necessarie per gestire l'array. Nel caso che vuoi indicare esplicitamente le dimensioni dell'array puoi usare il formato fnc(int *ar, int dx, int dy) e accedere all'elemento x-y con ar[y*dx+x]. Un pò meno elegante ma funziona.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:41.



















