Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Shea
    Registrato dal
    Jul 2000
    Messaggi
    157

    [C++] Passaggio varibile tra 2 classi

    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:

    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.

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    codice:
    #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.


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da netarrow
    Quello che stai usando tu sono due metodi
    scusa ma ormai penso in OOP sono funzioni.
    Metodi se fossero incapsulati in una classe.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    Utente di HTML.it L'avatar di Shea
    Registrato dal
    Jul 2000
    Messaggi
    157
    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...

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    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.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.