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++ - Problemino con classe in c++...
Forum - C/C++ - Problemino con classe in c++...

Avatar
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 14:22
Martedì, 05/05/2009
Ciao a tutti,
il mio problema potrebbe sembrare stupido per molti di voi ma purtroppo sono ancora all' inizio con il c++.
Il problema è questo...ho creato un header file con una classe dove c'è scritto questo:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. using namespace std;
  3. class classe
  4. {
  5. public:
  6.              void strlung(char stringa[500], int lung)
  7.              {
  8.                
  9.                 lung=0;  
  10.                 char* punt;
  11.                 punt = & stringa[0];    
  12.                 do
  13.                 {
  14.                     punt++;
  15.                     lung++;
  16.                 }
  17.                 while(*punt != NULL);
  18.                 }
  19. };


Praticamente assegna alla variabile lung la lungeza della stringa.
Nel file cpp utilizzo la classe così:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include "file_creato_da_me.h"
  3. using namespace std;
  4. int main()
  5. {
  6.     char stringa[500];
  7.     int lol;
  8.     cout << "Insert stringa" << endl;
  9.     cin >> stringa;
  10.     classe ogetto;
  11.     ogetto.strlung(stringa, lol);
  12.     cout << lol << endl;
  13.     system("pause>nul");
  14. }


Il programma dovrebbe assegnare alla variabile "lol" la lunghezza della stringa, ma invece assegna un valore tipo "40324". Come mai?
Grazie a tutti!!:k:

Ultima modifica effettuata da luca94 il 05/05/2009 alle 14:23


eb 04 af c2 bf a3 81 ec     00 01 00 00 31 c9 88 0c

0c fe c1 75 f9 31 c0 ba     ef be ad de 02 04 0c 00

d0 c1 ca 08 8a 1c 0c 8a     3c 04 88 1c 04 88 3c 0c

fe c1 75 e8 e9 5c 00 00     00 89 e3 81 c3 04 00 00

00 5c 58 3d 41 41 41 41     75 43 58 3d 42 42 42 4
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 14:30
Martedì, 05/05/2009
Dato che la variabile che conterra' la lunghezza deve essere variata all'interno della funzione membro della classe, allora la devi passare per reference.

Quindi deve essere

void strlung(char stringa[500], int& lung)

Ultima modifica effettuata da theprogrammer il 05/05/2009 alle 14:30


- 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
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 14:37
Martedì, 05/05/2009
Adesso funziona..grazie!!!
Cmq puoi spiegarmi più dettagliatamente perchè prima non funzionava?? In modo da capire meglio....


eb 04 af c2 bf a3 81 ec     00 01 00 00 31 c9 88 0c

0c fe c1 75 f9 31 c0 ba     ef be ad de 02 04 0c 00

d0 c1 ca 08 8a 1c 0c 8a     3c 04 88 1c 04 88 3c 0c

fe c1 75 e8 e9 5c 00 00     00 89 e3 81 c3 04 00 00

00 5c 58 3d 41 41 41 41     75 43 58 3d 42 42 42 4
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 14:40
Martedì, 05/05/2009
Se passi una variabile da una funzione ad un'altra e vuoi modificare questa variabile all'interno della seconda funzione, allora devi passarne l'indirizzo in memoria e non la copia della variabile.

Se stai studiando il C++, rivedi la parte di passaggio dei valori alle funzioni (per valore, per puntatore, per reference).


- 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
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 14:44
Martedì, 05/05/2009
Testo quotato


Se passi una variabile da una funzione ad un'altra e vuoi modificare questa variabile all'interno della seconda funzione, allora devi passarne l'indirizzo in memoria e non la copia della variabile.

Se stai studiando il C++, rivedi la parte di passaggio dei valori alle funzioni (per valore, per puntatore, per reference).


Grazie 1000! Ora ho capito :D

Ultima modifica effettuata da luca94 il 05/05/2009 alle 14:45


eb 04 af c2 bf a3 81 ec     00 01 00 00 31 c9 88 0c

0c fe c1 75 f9 31 c0 ba     ef be ad de 02 04 0c 00

d0 c1 ca 08 8a 1c 0c 8a     3c 04 88 1c 04 88 3c 0c

fe c1 75 e8 e9 5c 00 00     00 89 e3 81 c3 04 00 00

00 5c 58 3d 41 41 41 41     75 43 58 3d 42 42 42 4
PM Quote