PDA

Visualizza la versione completa : [C++] Passaggio varibile tra 2 classi


Shea
01-02-2005, 09:34
Sto studiando il C++ e sto provando a fare dei piccoli programmini come esercizio, ora vorrei passare una variabile da una classe all'altra, solo che non riesco e ricevo errori.
Posto il codice:


#include <iostream>
#include <string>
using namespace std;

string genere;

char musica(char c) {
//string genere;
switch(c) {
case 'm':
genere = "Heavy Metal!";
break;
case 'j':
genere = "Jazz!";
break;
case 'r':
genere = "Rock!";
break;
case 'p':
genere = "Pop!";
break;
case 'b':
genere = "Blues!";
break;
case 'a':
genere = "Progressive!";
break;
default:
genere = "La musica che ascolti fa schifo!";
break;
}
}

int main(string &genere) {
cout << "Premi m per scegliere Heavy Metal \n";
cout << "Premi j per scegliere Jazz \n";
cout << "Premi r per scegliere Rock \n";
cout << "Premi p per scegliere Pop \n";
cout << "Premi b per scegliere Blues \n";
cout << "Premi a per scegliere Progressive \n";
//char c=cin.get();
char c;
//string genere;
cin >> c;
//cout << genere;
//cout << c;
cout << "Hai scelto: " << genere << endl;
return(0);
}

Il problema è sulla variabile genere che quando la richiamo nella main non viene visualizzata.

grazie per l'aiuto.

netarrow
01-02-2005, 14:58
#include <iostream>
#include <string>
using namespace std;

string genere;

void musica(char c) {
//string genere;
switch(c) {
case 'm':
genere = "Heavy Metal!";
break;
case 'j':
genere = "Jazz!";
break;
case 'r':
genere = "Rock!";
break;
case 'p':
genere = "Pop!";
break;
case 'b':
genere = "Blues!";
break;
case 'a':
genere = "Progressive!";
break;
default:
genere = "La musica che ascolti fa schifo!";
break;
}
}

int main() {
cout << "Premi m per scegliere Heavy Metal \n";
cout << "Premi j per scegliere Jazz \n";
cout << "Premi r per scegliere Rock \n";
cout << "Premi p per scegliere Pop \n";
cout << "Premi b per scegliere Blues \n";
cout << "Premi a per scegliere Progressive \n";
//char c=cin.get();
char c;
//string genere;
cin >> c;
musica(c);
cout << "Hai scelto: " << genere << endl;
return(0);
}


Scusa ma dove le vedi le due classi? :rollo:

Quello che stai usando tu sono due metodi, il metodo main è il metodo principale, ovvero da dove inizia il programma. Se tu come argomento ci metti un riferimento stringa e dentro il corpo del metodo chiami genere, la variabile visualizzata sarà genere passata al main, che in questo caso è sempre vuota.

Gli altri problemi erano che il metodo musica non ritorna alcun tipo di dato, quindi va specificato come void e non come char.

Inoltre nel tuo codice il metodo musica non veniva mai chiamato :) quindi anche genere globale non veniva modificato.


:ciauz:

netarrow
01-02-2005, 16:21
Originariamente inviato da netarrow
Quello che stai usando tu sono due metodi
:ciauz:

scusa ma ormai penso in OOP :dhò: sono funzioni.
Metodi se fossero incapsulati in una classe.

:ciauz:

Shea
01-02-2005, 16:38
grazie mille Netarrow, alla fine ho capito che erano delle funzioni. :)

E rileggendo bene dei paragrafi ho capito che mettendo la variabile generale come public questa veniva passata automaticamente da una funzione all'altra.

Ho ancora tanto da imparare... :(

netarrow
01-02-2005, 17:12
Originariamente inviato da Shea
mettendo la variabile generale come public questa veniva passata automaticamente da una funzione all'altra.


:master:

In C++ public serve a dire che il membro di una classe è accessibile tramite l' oggetto anche fuori dalla classe.

Se nel tuo codice si mette public davanti alla variabile viene dato un errore. In altri linguaggi, come Java, si è sempre in una classe quindi public si può usare sempre; essedo C++ un ibrido le caratteristiche dell'OOP non si possono sempre mescolare con la modularità.

Il vero problema è che se passi un argomento ad una funzione e poi chimi quel parametro, ha sempre la precedenza il paremetro che quella globale.

:ciauz:

Loading