Erro C ++ Nenhum sobrecarregado viável '='

Erro C ++ Nenhum sobrecarregado viável '='

Erros são as operações que podem ser o resultado do trabalho anormal de qualquer código. O erro não pode ser detectado no momento da escrita até que tenhamos executado o código ou seja compilado. Alguns erros proíbem o código de executar até que sejam removidos. Hoje, também discutiremos um erro que também ocorre quando o programa é compilado, ou seja, "Erro: nenhum correspondência para 'Operator ='". Este erro pode ser causado por razões como: se passamos o ponteiro onde a string deve ser passada, modificando a variável constante, etc. Não é difícil remover o erro "sem sobrecarga viável", mas a tarefa principal é entender o erro porque ele apenas mostra o erro sem qualquer descrição do erro.

Sintaxe

Não existe uma sintaxe tal predefinida para esse erro, porque não faz parte do código ou da saída, é apenas uma ambiguidade que pode ser causada devido ao código errado. Como podemos ver, abaixo está um exemplo de como pode parecer o erro.

Erro: Nenhuma correspondência para 'Operator ='

Exemplo # 01:

Vamos ter uma idéia sobre esse erro e o método para resolver isso. Para entender melhor, realizaremos um exemplo no qual passaremos os nomes usando objetos para a função e eles os exibirão. Primeiro incluiremos o arquivo de cabeçalho iostream. Depois disso, declararemos uma classe chamada "My_Object". Dentro disso, declaramos duas variáveis ​​de string denominadas "f_name e" l_name ", o" f_name "que indica o primeiro nome da pessoa em que o" l_name "indica o sobrenome da pessoa.

Em seguida, declaramos um construtor público chamado "my_object ()", no qual atribuímos valores nulos para as variáveis ​​"f_name" e "l_name". Depois disso, declaramos outra função à qual passamos as variáveis ​​do tipo string "fn" e "ln". Dentro disso, chamamos o método name_set (). Em seguida, declaramos duas funções de membro "show ()" e "name_set ()". Quando a função "show () é chamada, ela exibirá os primeiros nomes e sobrenomes juntos. Considerando que, na função do membro "set_name ()", passamos duas variáveis ​​de string do tipo de string "fn" e "ln" que também passamos para o segundo construtor.

Agora, usando o operador de atribuição de cópia da classe my_object, pegamos um parâmetro do tipo "my_object". O compilador sempre o declara como um membro público em linha de qualquer classe. Dentro deste membro, atribuímos o SRC.F_name para o "f_name" e src.L_name para o "l_name" que mantemos a cópia do "f_name" e "l_name". Isso é passado para os membros da classe My_Object. Agora, declaramos um objeto da classe my_cobject chamado "nome1" para o qual passamos duas cordas "Anna" e "Smith" como um argumento. Isso chamará o construtor e exibirá o primeiro nome junto com o sobrenome.

Depois disso, criamos outro objeto "nome2" e depois atribuímos o nome a esse objeto separadamente. Depois de passar os valores para o construtor para ambos os objetos, chamamos o método show () que exibirá os nomes para os objetos "nam1" e "name2". No final do código, retornamos o valor nulo e executamos nosso código.

incluir
classe my_object
privado:
std :: string f_name, l_name;
público:
my_object () f_name = ""; L_name = "";
my_object (std :: string fn, std :: string ln)
name_set (fn, ln);

void show () std :: cout << "The name is " << F_name << " " << L_name << ".\n";
void name_set (std :: string fn, std :: string ln) f_name = fn; L_name = ln;
my_object & Operator = (const my_object & src)
F_name = src.F_name;
L_name = src.L_name;
retornar *isso;

;
int main (int argc, char ** argv)
my_object name1 ("anna", "smith");
my_object name2;
nome2 = ("Anna", "Smith");
nome1.mostrar();
Nome2.mostrar();
retornar 0;

Após a execução do nosso código, temos esse erro que exibe que escrevemos o código errado na linha 24, indicando o tipo de erro que é encontrado "Erro: nenhuma correspondência para 'Operator ='". Agora, tentaremos resolver este erro.

Para resolver esse erro, temos várias maneiras de passar os valores para o construtor de qualquer classe. No primeiro método, simplesmente atribuiremos o objeto "Nome1" ao "nome2" porque passamos os mesmos valores para os dois objetos, para que não haja necessidade de passá -los separadamente. Agora executamos o código.

int main (int argc, char ** argv)
my_object name1 ("anna", "smith");
my_object name2;
nome2 = nome1;
nome1.mostrar();
Nome2.mostrar();

Depois de fazer alterações no código, como mostrado acima, temos o resultado dado no trecho abaixo. Exibimos o nome passado para o construtor é exibido com sucesso sem nenhum erro.

O segundo método para resolver esse erro é quando precisamos passar os diferentes valores para os dois objetos. Simplesmente usaremos o nome da classe junto com os valores que devem ser passados ​​para o construtor como argumento. Passamos o primeiro nome "Jhone" e o segundo nome "Smith". Então, executamos o código.

int main (int argc, char ** argv)
my_object name1 ("anna", "smith");
my_object name2;
nome2 = my_object ("jhone", "smith");
nome1.mostrar();
Nome2.mostrar();

Depois de executar o código de adição acima, temos a saída como mostrado abaixo. Para o objeto "Name1", ele exibiu o nome "Anna Smith" e para o segundo objeto "Name2" exibiu "Jhone Smith". Mas desta vez nosso código funcionou corretamente sem erros nele.

Agora, tentaremos outro método para executar nosso código com sucesso. Como nos casos acima, tentamos atribuir os valores aos objetos usando o operador de atribuição. Mas desta vez, passaremos os valores no momento da declaração do objeto. Como podemos ver no trecho abaixo, no momento da declaração de um objeto "Nome1", passamos os valores como um argumento para o objeto repetindo a mesma etapa para o "nome2". Agora, executamos o código mais uma vez.

int main (int argc, char ** argv)
my_object name1 ("anna", "smith");
my_object name2 ("jhone", "smith");
nome1.mostrar();
Nome2.mostrar();

Depois que o código é executado para esse tempo também, não encontramos nenhum erro, o que significa que isso também nos impedirá de ter nenhum erro.

Conclusão

Discutimos brevemente um erro que podemos enfrentar enquanto trabalhamos em funções que são acessadas nas aulas. Também estudamos as causas e métodos para resolver o erro "sem sobrecargas viáveis". Principalmente esse erro é difícil de entender para novos programadores, por isso tentamos facilitar a vida disso implementando exemplos e também com sua explicação.