Newsgroup: it.comp.lang.c++
Titolo: Perché mi dà errore? Passaggio di array multi a una funzione

Continua a darmi errore e a non compilare. Compilatore g++.
Errore: approssimazione dati.cpp:28: error: cannot convert 'int
(*)[(((long unsigned int)(((int)n) - 1)) + 1u)]' to 'int (*)[100]' for
argument '1' to 'void stampavettore(int (*)[100])'
il codice è:
#include <iostream>
#include <cmath>
int n;
void stampavettore(float array[][100]);
using namespace std;
int main () 
{
int i;
cout << "Inserire il numero di dati disponibile. --> "; cin >> n; cout
<<  "inserisci i dati";
float tabe[2][n];
for (i=0; i<=n; i++)
{cout << "x" << i << " --> "; cin >> tabe[0][i]; cout << "\t";}
stampavettore(tabe);
return 0;
}
void stampavettore(float array[][100])
{
for (int i=0; i<=n; i++)
cout << array[0][i] << " | ";
cout << array[1][i] << endl;
}
-- 
Guru       Non coltivate i beni terreni,
               non rimarrà niente.
         Coltivate l'amore delle persone,
            vale più di qualsiasi oro. 

 float tabe[2][n];
Questo array non rispetta comunque il formato del prototipo della
funzione. Il secondo argomento è variabile.

 funzione. Il secondo argomento è variabile.
Nota a margine: se non sbaglio la possibilita' di dichiarare un array 
locale con dimensione variabile e' un estensione di gcc. Lo standard non 
lo ammette.
  bye
	av.

 funzione. Il secondo argomento è variabile.
E quindi ne devo stabilire a priori la grandezza? Se dal codice
precedente tolgo n e stabilisco nella dichiarazione la grandezza del
vettore, il codice così scritto è scritto corretto o formalmente
andrebbe riscritto?
Grazie!!


 lo ammette.
E quindi se non conosco la dimensione della tabella che avrò come input
devo definire comunque un array multidimensionale limitato e poi porre
un controllo sul numero di elementi che vengono inseriti?


 andrebbe riscritto?
Se dal codice precedente togli n e ci metti 100, il tuo array rispetta
il prototipo della funzione, ma sei limitato a quel valore fisso. In
alternativa, devi allocare dinamicamente il vettore. Ti consiglio
comunque di leggere un buon manuale del linguaggio ("C++ Primer" di
Stanley Lippman, ora alla 4^ edizione è un ottimo testo, oppure
"Thinking in C++" di Bruce Eckel, peraltro scaricabile gratuitamente).
Eventualmente, se il tuo problema non ha stretta attinenza con il C++
ma con il C (come mi sembra di capire) spostati su it.comp.lang.c.

 lo ammette.
Non so che cosa dica lo standard riguardo i variable length array (e
sinceramente non ho voglia di andare a guardarci :-P), ma so che nel
C99 sono stati implementati e penso che il gcc precorresse addirittura
l'ultimo standard del C.

 un controllo sul numero di elementi che vengono inseriti?
Tu hai necessità di usare il C o il C++ ? perché nel primo caso fai
bene ad allocare dinamicamente un array:
#include <stdlib.h>
...
float *myData;
size_t n;
...
myData = malloc(n*sizeof(float));
....
....
free(myData);
Nel secondo caso puoi usare un std::vector.
Nel primo caso, poi, rivolgiti pure a it.comp.lang.c.

 bene ad allocare dinamicamente un array:
Il c++....
Ok, cambierò il codice, in caso se non funzionerà mi farò risentire...
Grazie mille!


 Stanley Lippman, ora alla 4^ edizione è un ottimo testo,
Eh, proprio il Lippman uso, anche se alla 2^ edizione. Diciamo che
alcune cose non sono più così, lo standard è cambiato, ma la base è
ottima.
P.S. Aaaargh! Sai che adesso, rileggendo il Lippman, ho notato che
esplicita in una frase che "una variabile non può essere utilizzata per
specificare la dimensione di un vettore", frase che avevo saltato nella
prima lettura, in quanto ero più interessato alle dichiarazioni di
vettori multidimensionali....
Chiedo venia! :-P


 ottima.
Un libro che non dovrebbe mancare in nessun museo dell'informatica che
si rispetti. Pero' studiare su un libro che ha piu' di quindici anni
(!!) e' farsi del male.
Tutti i tuoi problemi scompaiono usando std::vector.
Ciao,
Nicola

 Pero' studiare su un libro che ha piu' di quindici anni (!!) e' farsi del male.
Tra l'altro, io di quel testo possiedo anche la terza edizione e dalla
terza alla quarta noto moltissimi cambiamenti, figuriamoci dalla
seconda...


Ti basti sapere che la seconda e' piu' o meno la meta' della terza.
Uno dei miei rimpianti e' non aver cercato di comprare da una collega
di qualche anno fa la sua copia della prima edizione. Ho tutte le
altre...
Ciao,
Nicola

[...]copia della prima edizione.
Guarda qui, magari la trovi ;-)
http://www.alibris.com/search/search.cfm?chunk=25&mtype=&qwork=875894&S=R&matches=129&browse=1&qsort=r