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.