PDA

Visualizza la versione completa : [C++] Variabile usata fuori dal body


razielmitico
20-11-2013, 11:35
Buon giorno ragazzi,sono uno studente di un instituto tecnico,e sto svolgendo un esercizio in C++,l'esercizio consiste:

-ingrandire una matrice faccendo si che un quadrato della matrice di partenza corrisponda a un quadrato 2x2 della nuova matrice

-rimpicciolire la matrice faccendo si che un quadrato 2x2 della matrice di partenza corrisponda a un quadrato della nuova matrice



ecco il mio codice (ho sviluppato solo l'ingrandimento per ora):


#include <iostream>
#define Mp 3
#include <conio.h>
#include <stdlib.h>
#include <windows.h>

using namespace std;

void menu (int c);
void movimento_cursore(int &c);
void dimensionamento (int &righe,int &colonne);
void ingrandisci (int righe,int colonne,bool matrice[][colonne],bool m[][c]);
void caricamento(bool matrice[][colonne],int righe, int colonne);


int main()
{
int righe,colonne;

dimensionamento(righe,colonne);

int r=righe*2,c=colonne*2;
bool matrice[righe][colonne],m[r][c];

caricamento(matrice,righe,colonne);

int opzione=0;
bool b=0;

do{
movimento_cursore(opzione);


switch (opzione)
{
case 0: {
ingrandisci(matrice,righe,colonne,m);
break;
}

case 1:{
break;
}

case 2:
{
b=1;
break;
}


}
}
while (b==1);
system("cls");
cout<<"Hai terminato il programma: ARRIVEDERCI! :D";
return 0;

}


void movimento_cursore(int &c){
int key=0,opzione=0;

while (key != 13){ //tasto enter
menu (c);
key = getch();

switch (key) {

case 72: //sopra
{
if (c>0)
c--;
else
c=Mp-1;
}
break;

case 80: //sotto
{
if (c<Mp-1)
c++;
else
c=0;
}
break;
}
}
}


void menu (int c){
system ("cls");
if(c==0)cout<<"--->";cout<<"Ingrandisci la matrice"<<endl;
if(c==1)cout<<"--->";cout<<"Rimpicciolisci la matrice"<<endl;
if(c==2)cout<<"--->";cout<<"Esci dal programma"<<endl;
}

void dimensionamento (int &righe,int &colonne){
cout<<"Inserisci le dimensioni della matrice (ATTENZIONE: se si vuole rimpicciolire la matrice le dimensioni devono essere multipli di 2)"<<endl<<endl;
cout<<"riga: ";
cin>>righe;
cout<<endl<<"colonne: ";
cin>>colonne;
cout<<endl<<"Inserimento avvenuto con successo";
system ("pause");
system ("cls");
}

void caricamento(bool matrice[][colonne],int righe,int colonne){
for (int i=0;i<righe;i++){
for (int j=0;j<colonne;j++){
cin>>matrice[i][j];
}
}
}

void ingrandisci (bool matrice[][colonne],int righe,int colonne,bool m[][c]){
bool comodo;
int r_comodo,c_comodo;

for (int i=0;i<righe;i++){
for (int j=0;j<colonne;j++){
comodo=matrice[i][j];
r_comodo=i*2;
c_comodo=j*2;
m[r_comodo][c_comodo]=comodo;
m[r_comodo][c_comodo+1]=comodo;
m[r_comodo+1][c_comodo]=comodo;
m[r_comodo+1][c_comodo+1]=comodo;
}
}

}




ma il compilatore (CodeBlocks) mi da un errore che non riesco a capire:



riga 12 error: use of parameter 'colonne' outside function body



perchè? nella riga 12 dichiaro un prototipo di una funzione che uso dopo,i parametri (in questo caso righe e colonne) vengono passati dal main alla funzione,qual'è il suo problema? XD

Alex'87
20-11-2013, 12:01
Nel prototipo di ingrandisci hai messo

int colonne,bool matrice[][colonne]

Non va bene, non puoi usare una dichiarazione del genere. Se la dimensione non è nota a compilazione devi usare l'allocazione dinamica.

Loading