Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C++]Errore nel passaggio per referenza!
Forum - C/C++ - [C++]Errore nel passaggio per referenza!

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 20:27
Sabato, 06/06/2009
compilando questo codice(utilizza il bubble sort per ordinare un vettore di interi):
Codice sorgente - presumibilmente C++

  1. void ordina(int& v[], int dim){
  2.      int comodo;
  3.      bool scambio = true;
  4.      //ordinamento vettore:
  5.      do{
  6.           scambio = false;
  7.           for(int i=0; i<dim; i++){
  8.                                    if(v[i]<v[i+1]){
  9.                                    comodo = v[i];
  10.                                    scambio = true;
  11.                                    v[i]=v[i+1];
  12.                                    v[i+1]=comodo;
  13.                                    }
  14.           }
  15.          }while(scambio!=false);
  16.      }


mi da il seguente errore:
declaration of `v' as array of references
mentre se tolgo "&" dall'inizio della funzione non mi da alcun errore, perchè?

p.s. Devo per forza far passare la funzione per referenza e non per valore.


The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 21:04
Sabato, 06/06/2009
So il C, ma questo vale anche per il C++ sicuramente... devi sapere che gli array sono già puntatori quindi non c'è bisogno che fai per riferimento l'array. E si fa nel main o dove chiami la funzione quindi: ordina(&v,dim);
ma ripeto non c'è bisogno :)

se vuoi far che ne so per un intero allora es. prova(&i); e nella funzione prova(int *i); questo è un esempio di passaggio per riferimento :)

Ultima modifica effettuata da Lawliet il 06/06/2009 alle 21:09


"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
cit. theprogrammer
PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 12:28
Domenica, 07/06/2009
grazie, adesso funziona.
Però ho un' altro problema:

coidce del file Ordina.h
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void Ordina(int vettore[], int dimensione);//Prototipo per la funzione di ordinamento di un vettore di tipo integer
  5.  
  6. //Funzione per l'ordinamento di un vettore di tipo integer
  7. void Ordina(int vettore[], int dimensione){
  8.      int comodo;
  9.      bool scambio = true;
  10.      
  11.      do{
  12.         scambio = false;
  13.         for(int j = 0; j<dimensione; j++){
  14.                 if(vettore[j]<vettore[j+1]){
  15.                                             scambio = true;
  16.                                             comodo = vettore[j];
  17.                                             vettore[j] = vettore[j+1];
  18.                                             vettore[j+1] = comodo;
  19.                                             }
  20.                 }
  21.         }while(scambio == true);    
  22. }



codice di prova per testare il file Ordina.h

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. #include "Ordina.h"
  4. using namespace std;
  5.  
  6.  
  7. int main (){
  8.     int d = 10;
  9.     int v[d];
  10.    
  11.     //lettura
  12.     for(int i=0; i<d; i++){
  13.             cout<<i<<"° dato: ";
  14.             cin>>v[i];
  15.             }
  16.     //Ordinamento
  17.     Ordina(v, d);
  18.     //Stampa
  19.     cout<<endl;
  20.     cout<<"vettore ordinato: "<<endl<<endl;
  21.    
  22.     for(int i=0; i<d; i++){
  23.             cout<<i<<"° "<<v[i]<<endl;
  24.             }
  25.    
  26.     system("pause");
  27.     return 0;
  28.     }



il compilatore non da problemi ma il risultato si, perchè?
mi aggiunger al vettore un dato tipo 42938 che non ho mai introdotto!
allego il file per testarlo.
grazie.


XBarboX ha allegato un file: LibrerieMie.zip (152383 bytes)
Clicca qui per scaricare il file


The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 12:54
Domenica, 07/06/2009
La for nell'ordinamento deve essere

for(int j = 0; j<dimensione-1; j++){

(dimensione-1 e non dimensione ...)

Ricorda inoltre che il codice NON va inserito nei file header (nel .h).

Il codice va solamente nei file .c e .cpp. I file .h devono contenere solamente dichiarazioni.

Ti ricordo ancora che i file .h NON sono librerie.

Infine, ti consiglio di dichiarare costante il valore usato per dichiarare la dimensione dell'array, per avere una maggiore compatibilità dato che non tutti i compilatori lo supportano (C99 compliant). Quindi e' meglio

const int d = 10;

Ultima modifica effettuata da theprogrammer il 07/06/2009 alle 12:55


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 12:55
Domenica, 07/06/2009
Testo quotato

Postato originariamente da theprogrammer:

La for nell'ordinamento deve essere

for(int j = 0; j<dimensione-1; j++){

(dimensione-1 e non dimensione ...)

Ricorda inoltre che il codice NON va inserito nei file header (nel .h).

Il codice va solamente nei file .c e .cpp. I file .h devono contenere solamente dichiarazioni.

Ti ricordo ancora che i file .h NON sono librerie.


waoo, ma perchè dimensione-1, non capisco!!
comunque non sapevo che gli header servissero a quello, grazie!


The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 12:56
Domenica, 07/06/2009
Testo quotato

Postato originariamente da XBarboX:

Testo quotato

Postato originariamente da theprogrammer:

La for nell'ordinamento deve essere

for(int j = 0; j<dimensione-1; j++){

(dimensione-1 e non dimensione ...)

Ricorda inoltre che il codice NON va inserito nei file header (nel .h).

Il codice va solamente nei file .c e .cpp. I file .h devono contenere solamente dichiarazioni.

Ti ricordo ancora che i file .h NON sono librerie.


waoo, ma perchè dimensione-1, non capisco!!
comunque non sapevo che gli header servissero a quello, grazie!


scusa, si adesso mi è tutto chiaro!, perchè nell'ordinamento considera un dato in +, che sciocco scusate per il disturbo


The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 12:58
Domenica, 07/06/2009
Testo quotato

Postato originariamente da XBarboX:
waoo, ma perchè dimensione-1, non capisco!!



Se dai un'occhiata piu' approfondita al codice che tu stesso hai scritto, l'algoritmo prevede di accedere all'elemento

vettore[j+1]

Quindi, il ciclo si deve fermare all'elemento precedente (dimensione-1) altrimenti in quella riga accedi oltre la fine dell'array (con conseguenze imprevedibili)

Testo quotato

comunque non sapevo che gli header servissero a quello, grazie!



Questo significa (senza offesa) che dovresti studiare un po' di teoria sul linguaggio prima di scrivere codice ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 13:20
Domenica, 07/06/2009
Testo quotato

Postato originariamente da theprogrammer:

Testo quotato

Postato originariamente da XBarboX:
waoo, ma perchè dimensione-1, non capisco!!



Se dai un'occhiata piu' approfondita al codice che tu stesso hai scritto, l'algoritmo prevede di accedere all'elemento

vettore[j+1]

Quindi, il ciclo si deve fermare all'elemento precedente (dimensione-1) altrimenti in quella riga accedi oltre la fine dell'array (con conseguenze imprevedibili)

Testo quotato

comunque non sapevo che gli header servissero a quello, grazie!



Questo significa (senza offesa) che dovresti studiare un po' di teoria sul linguaggio prima di scrivere codice ...



1)L'errore l'avevo capito, se noti prima del tuo post l'ho scritto,
2)Usare gli header come "librerie" l'avevo visto su un sorgente di pierotofy.it, e allora da lì in poi gli ho usati così... comunque ora lo so, grazie.

p.s. Sul mio libro degli header non parla propio(è molto piccolo).


The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 15:11
Domenica, 07/06/2009
Testo quotato

Postato originariamente da XBarboX:
1)L'errore l'avevo capito, se noti prima del tuo post l'ho scritto,



Inizialmente non lo avevi chiaro e io ho iniziato a scriverti la risposta.
Quando ho finito tu avevi capito e corretto la tua ...

Testo quotato

2)Usare gli header come "librerie" l'avevo visto su un sorgente di pierotofy.it,



Beh, anche quello e' sbagliato.

Ecco perche' bisogna fare attenzione ad usare codice trovato in rete ...

Testo quotato

... gli ho usati così...



"li ho usati così" ... attenzione all'italiano ...

Testo quotato

comunque ora lo so, grazie.



Prego

Testo quotato

p.s. Sul mio libro degli header non parla propio(è molto piccolo).



proprio ... l'italiano ...

P.S. Cambia libro ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo