PDA

View Full Version : [C++] passaggio di array dinamici a function


Kesslers
03-05-2010, 13:15
Buongiorno a tutti,
ho difficoltà con il passaggio di una matrice allocata dinamicamente ad una semplice function che per il momento si limita a stampare a schermo il contenuto della matrice. Nel main ho allocato dinamicamente l'array, ma gli errori di compilazione saltano fuori nella function, di cui vi allego il semplice listato:

void stampa(int matrice[][],int n, int m)
{
int i, j;

for(i=0;i<n;i++)
for(j=0;j<m;j++)
cout << matrice[i][j] << endl;
}
Qualcuno può suggerirmi come correggere il codice?
Grazie mille intanto e buona giornata!

Teo@Unix
03-05-2010, 13:50
però è meglio che posti anche gli errori, così è più facile aiutarti.

non è che è un problema su come passi la matrice?
Io farei così con N definito:

void stampa(int matrice[][N],int n, int m)

Kesslers
03-05-2010, 14:48
è vero..riporto il listato completo:
#include<iostream>
using namespace std;

void stampa(int matrice[][], int n, int m);

int main(int argc, char* argv[])
{
int n, m, i, j;

cout << "No. of rows:" << endl; cin >> n;
cout << "No. of columns:" << endl; cin >> m;

int** p = NULL;
p = new int*[n];

for(i=0;i<n;i++)
p[i] = new int[m];

int a = 0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
p[i][j] = a++;

stampa(p,n,m);

for(i=0;i<n;i++)
delete((int*)p[i]);

delete [] p;
p = NULL;

return 0;
}

void stampa(int matrice[][],int n, int m)
{
int i, j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cout << matrice[i][j] << endl;
}



E questi sono gli errori del compilatore:

Compiling...
main.cpp
C:\array\main.cpp(4) : error C2087: '<Unknown>' : missing subscript
C:\array\main.cpp(27) : error C2664: 'stampa' : cannot convert parameter 1 from 'int ** ' to 'int [][1]'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
C:\array\main.cpp(38) : error C2087: '<Unknown>' : missing subscript
Error executing cl.exe.

main.obj - 3 error(s), 0 warning(s)

Grazie di nuovo!

cionci
03-05-2010, 14:56
cannot convert parameter 1 from 'int ** ' to 'int [][1]'

Quindi usa int ** al posto di int [][]

Kesslers
03-05-2010, 19:14
Wow grandiosi, funziona! Era un problema di puntatori. Grazie mille!!
Ciao ciao.