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