Newsgroup: it.comp.lang.c++
Titolo: Che vuol dire quest'errore?

Scusate per la banalitą, ma potete spiegarmi perchč il compilatore mi da
quest'errore?
 passing `int (*)[((col - 1) + 1)]' as argument 1 of `stampaM(int (*)[10],
int, int)'
Il codice č questo:
#include <iostream>
#include<stdlib.h>
void stampaM(int [][10],int,int);
main()
{
int i,j,rig=2,col=3;
int matrix[rig][col];
for(i=0;i<rig;i++)
    for(j=0;j<col;j++)
         cin>>matrix[i][j];
stampaM(matrix,rig,col);
system("pause");
}
void stampaM(int matrix[][10],int rig,int col)
{
int i,j;
 for(i=0;i<rig;i++)
     {
      cout<<"riga " <<i<<": ";
         for(j=0;j<col;j++)
            cout<<"["<<matrix[i][j]<<"] ";
       cout<<endl;
      }
}
Come si passa correttamente un'array multidimensionale ad una funzione?
Spero in un vostro aiuto.

 Il codice è questo:


 Bob Rock
Il compilatore che ho è dev-C++, e credo che il problema non sia tra quelli
che elenchi tu, a me dev riporta solo un errore, e cioè quello che ho già
riportato: passing `int (*)[((col - 1) + 1)]' as argument 1 of `stampaM(int
(*)[10],
int, int)'.
Comunque grazie lo stesso per il fastidio che ti sei preso.
Ciao.
Spero che qualcun altro sappia o voglia aiutarmi.

un int (altrimenti devi definirla restituire void)
no. di default main() non restituisce un bel niente: infatti NON è
possibile scrivere questo in C++:
main() {
}
anche se era possibile in C, il nuovo standard C++ lo ha proibito.
Invece è possibile, corretto e standard scrivere questo:
int main() {
}
anche se a prima vista uno potrebbe pensare che manchi un return:
invece lo standard prevede che la funzione main (e *solo* quella)
restituisca 0 di default, se non specificato altrimenti.
Anto
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688

 wrote in message
news:hXhv6.21255$dJ6.1...@news.infostrada.it...

Invece ha ragione lui. In C++ la dimensione del vettore deve essere const,
pertanto se il tuo compilatore ti permette di evitarlo, non segue lo standard.
In ogni caso il parametro lo hai dichiarato come "int matrix[][10]" che viene
automagicamente tradotto in "int (*matrix)[10]" ovvero un puntatore ad un
vettore di 10 interi. Ma tu cerchi di passargli un oggetto dichiarato come "int
matrix[2][3]" che viene quindi sottoposto alla conversione di default da vettore
a puntatore ottenendo un puntatore a un vettore di 3 interi (ovvero stai
passando come argomento un oggetto di tipo "int[2][3]" che viene convertito al
tipo "int(*)[3]" ma il parametro era dichiarato come "int(*)[10]").
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 ha scritto nel messaggio
news:0ey9Ovmhaqb82p...@4ax.com...


 default in ansi c++ equivalente a dire int nomefunc(...)
In C.  In C++ (di cui si parla qui) e' un errore.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.

 ha scritto nel messaggio
news:rmu24ey...@mlinux.pd.infn.it...


 A che standard C++ ti riferisci e che compilatore usi?
Lo Standard C++ e' l'ISO/IEC 14882-1998; il solo ed unico che esista,
a quanto mi consta.  Puoi anche guardare il Lippmann-Lajoie a pagina
335, nel caso tu non avessi sotto mano quell'indispensabile documento
(che puo' essere acquistato alla modica cifra di US$18).
Il Lippmann-Lajoie dice (l'enfasi e' mia): "A function MUST SPECIFY a
return value; a declaration or definition of a function without an
explicit return value RESULTS IN A COMPILE TIME ERROR.  ...  In
pre-standard C++, in the absence of an explicit return type it was
assumed that the return type was int.  UNDER STANDARD C++, THE RETURN
TYPE OF A FUNCTION CANNOT BE OMITTED."
E cosa ti interessa quale compilatore uso?  Lo Standard e' lo
Standard.  E se un compilatore non lo implementa correttamente e'
meglio buttarlo via.  Comunque il KCC della Kuck and Associates mi
dice: "omission of explicit type is nonstandard ("int" assumed)"; ed
il g++ dice "ISO C++ forbids declaration of `main' with no type".  Ti
basta?


 a zero se dichiari main come void main(void).
Non si puo' dichiarare main come  void main().
Le uniche 2 possibilita' sono:
  int main()
  int main( int argc, char * argv[] )
In ogni caso main deve restituire un int.
	Mauro

meglio buttarlo via.
Spero tu non debba programmare per vivere.
  -----BEGIN GEEK CODE BLOCK-----
  Version: 3.1
  GE d- s:++;++ a- C++ ULUIS+++ P-- L++ E+++ W++ N+ o+ K++++ w---
  O- M-- V-- PS+++ PE-- Y PGP+++ t+ 5 X R* !tv b+++ DI D+++
  G+++ e++ h-- r+ y++
  ------END GEEK CODE BLOCK------

 Spero tu non debba programmare per vivere.
Cosa vuoi dire?  Ribadisco che: 1) un compilatore che contravviene
allo Standard e' inutile e dannoso; e che 2) se il tuo compilatore ti
lascia scrivere sia "int main()" che "main()" senza l'int e non ti
segnala errore nel secondo caso, questo non e' comunque un buon motivo
per usare la sintassi sbagliata al posto di quella giusta.
E, se TU devi programmare per vivere, sbatterai moooolto presto il tuo
nasino su un muro che si chiama "portabilita'".


compilatore non ti da un'errore
1) non mi chiamo Ciccio
2) quello che dici tu è vero in C, non in C++


 wrote in message
news:rm4rwcv...@mlinux.pd.infn.it...

Maurizio, credo che, nonostante il tono e il modo siano estremamente opinabili
(a partire dalla prima parola del suo primo post in questo thread: "ciccio"),
Giuseppe si riferisca al fatto che non esistono compilatori 100 conmpliant.
Pertanto non e' un'opzione buttare via un compilatore perche' non e' compliant
per chi programma per vivere. Dall'altro lato hai perfettamente ragione a dire
che lo standard conta piu' dell'implementazione. Salvo commentare eventuali
forzature dovute alla non compliancy del compilatore in uso.


il tuo nasino su un muro che si chiama "portabilita'".
Mi sembra di vedere confermato il sospetto che tu *non*
programmi per vivere. Me ne rallegro per la tua famiglia.
Chi ha fatto il primo posting e' sicuramente un maleducato e
ignorante sul C++. Rispondere sullo stesso tono non mi sembra
molto utile.
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 programmi per vivere. Me ne rallegro per la tua famiglia.
Diciamo che i miei programmi vanno su molte piattaforme.  Adesso
sviluppo su Linux/g++ (versione 3 beta, ancora meglio di KCC) e
l'eseguibile gira su una piattaforma real-time che si chiama LynxOS
(CPU RTPC o Motorola); in passato uno stesso programma scritto da me
doveva girare su VAX-VMS, Digital Unix a 64 bits ed Irix, e compilare
su ogni piattaforma coi compilatori nativi.  E' vero che vengo pagato
per insegnare, ma il lavoro di ricerca e' importante per me e per la
mia carriera; e con questi constraints si sviluppa un sano rispetto
per Standards e portabilita'.  Chi e' abituato a non muoversi mai da
una piattaforma Microsoft non puo' capire.


 molto utile.
Sono io ad aver fatto il primo post. Però non vedo perche sarei stato
maleducato ed ignorante.
Bob Rock


maleducato ed ignorante.
Chiedo scusa... mi riferivo a Recalcati


Diciamo che i miei programmi vanno su molte piattaforme.
Non vedo perche' uno si deve sentire offeso perche' non
campa facendo il programmatore. In Italia essere definito
un programmatore e' praticamente un insulto.
Nota che se non fosse gia' chiaro io ritengo che la forma
"void main" vada abolita dal codice e dagli esempi; e'
sbagliata e su questo non si discute.
Quello che contesto e' dire che esistono compilatori
standard e compilatori non standard (nessun compilatore
esistente e' standard - per ammissione dei produttori -
e comunque non esiste nessuno che ha l'autorita' di
dichiarare un compilatore standard; al massimo si
puo' discutere dell'implementazione standard o meno di
un particolare costrutto C++).
