You are passing the "name" parameter in the wrong way.
Also, although it is not a mistake, your program is not "idiomatic" C++ that is, it is not "pure" C++ it is a mixture of C++ and C.
#include <stdio.h>
#include <memory.h> // memset
class Nome
{
  private:
    char n[50];
  public:
    // void set_nome(); // <----------- ERRADO
    // funcao precisa ter um parametro, porque voce chamou com "set_nome(nome)"
    // void set_nome(char*);      // estas 3 declaracoes 
    // void set_nome(char* nome); // sao equivalente, parametro pode ter
    // void set_nome(char* xxx);  // qualquer nome, ou nao ter nome
    // colocamos "const" para deixar explicito que nao vamos alterar o parametro dentro da funcao
    void set_nome(const char*);
    // no construtor preenche "nome" com 50 zeros binarios
    Nome() { memset(n, 0, 50); }
};
// errado porque array de char tem tipo "char* ou " "char[]", "char" e' so UM caracter
// void Nome::set_nome(char nome){ // <----------- ERRADO
void Nome::set_nome(const char* nome)
{
  // n = nome;  // <------------ ERRADO
  // ou strcpy(n,nome);
  // copia no maximo 49 caracteres do parametro "nome" para "n"
  // por que 49 ? para ter certeza de vai ter pelo menos um zero binario
  // no final, ja' que no construtor preenchemos com 50 zeros binarios
  // e por que isso ? porque strings C precisam do zero binario no final
  // (strings C++ não precisam do zero binario no final)
  strncpy(n, nome, 49);ter um zero binario no final
}
int main()
{
  Nome a;
  char nome[50];
  scanf("%49[^\n]", nome); // le no maximo 49 caracteres
  printf("* nome=[%s]", nome);
  a.set_nome(nome);
}
							
							
						 
Could you explain in detail the changes made to the functions , because I did not understand very well. ( The part of const char * name)( I did not constructor not to get big in the question, even so thank you I did not do so).
– Vitor Gonçalves