Erro C++: Não Viável Sobrecarregado '=':

Erro C Nao Viavel Sobrecarregado



Erros são as operações que podem resultar do funcionamento 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 impedem a execução do código até que sejam removidos. Hoje, vamos discutir também um erro que também ocorre quando o programa é compilado, que é “error: no match for ‘operator=’”. Este erro pode ser causado por motivos como: se passamos o ponteiro onde a string deve ser passada, modificando a variável constante, etc. entenda o erro porque apenas mostra o erro sem nenhuma descrição do erro.

Sintaxe

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







erro : não combina por 'operador = '

Exemplo nº 01:

Vamos ter uma ideia sobre esse erro e o método para resolvê-lo. Para entender melhor, faremos um exemplo em que vamos passar os nomes usando objetos para a função e ela os exibirá. Primeiro, incluiremos o arquivo de cabeçalho iostream. Depois disso, vamos declarar uma classe chamada “my_object”. Dentro das quais, declaramos duas variáveis ​​string denominadas “F_name e “L_name”, o “F_name” que indica o primeiro nome da pessoa onde o “L_name” indica o sobrenome da pessoa.



Em seguida, declaramos um construtor público chamado “my_object()” no qual atribuímos valores nulos às variáveis ​​“F_name” e “L_name”. Depois disso, declaramos outra função para a 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 nomes e sobrenomes juntos. Considerando que, na função de membro “set_name ()”, passamos duas variáveis ​​de string do tipo 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 embutido de qualquer classe. Dentro deste membro, atribuímos o src.F_name ao “F_name” e src.L_name ao “L_name” que mantivemos 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 “name1” para o qual passamos duas strings “Anna” e “smith” como argumento. Isso chamará o construtor e exibirá o primeiro nome junto com o sobrenome.





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

incluir
classe meu_objeto {
privado :
std :: corda F_name, L_name ;
público :
meu_objeto ( ) { F_name = ' ' ; L_name = ' ' ; }
meu_objeto ( std :: corda fn, padrão :: corda ln ) {
conjunto_nome ( fn, ln ) ;
}
vazio mostrar ( ) { std :: cout << 'O nome é ' << F_name << ' ' << L_name << '. \n ' ; }
vazio conjunto_nome ( std :: corda fn, padrão :: corda ln ) { F_name = fn ; L_name = ln ; }
meu_objeto & operador = ( const meu_objeto & origem ) {
F_name = src. F_name ;
L_name = src. L_name ;
Retorna * isto ;
}

} ;
int a Principal ( int argc, Caracteres ** argv ) {
meu_objeto nome1 ( 'Ana' , 'ferreiro' ) ;
meu_objeto nome2 ;
nome2 = ( 'Ana' , 'ferreiro' ) ;
nome1. mostrar ( ) ;
nome2. mostrar ( ) ;
Retorna 0 ;
}

Após a execução do nosso código, temos este erro que mostra que escrevemos o código errado na linha 24 indicando o tipo de erro encontrado “error: no match for ‘operator=’”. Agora, vamos tentar resolver esse 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 objeto “nome2” porque passamos os mesmos valores para ambos os objetos, portanto não há necessidade de passá-los separadamente. Agora executamos o código.

int a Principal ( int argc, Caracteres ** argv ) {

meu_objeto nome1 ( 'Ana' , 'ferreiro' ) ;
meu_objeto nome2 ;
nome2 = nome1 ;
nome1. mostrar ( ) ;
nome2. mostrar ( ) ;

Após fazer as alterações no código conforme mostrado acima, temos o resultado dado no trecho abaixo. Nós exibimos o nome passado para o construtor é exibido com sucesso sem nenhum erro.

O segundo método para resolver este erro é quando temos que passar os valores diferentes para ambos os objetos. Simplesmente usaremos o nome da classe junto com os valores que devem ser passados ​​para o construtor como um argumento. Passamos o primeiro nome “jhone” e o segundo nome “smith”. Em seguida, executamos o código.

int a Principal ( int argc, Caracteres ** argv ) {

meu_objeto nome1 ( 'Ana' , 'ferreiro' ) ;
meu_objeto nome2 ;
nome2 = meu_objeto ( 'joão', 'ferreiro' ) ;

nome1. mostrar ( ) ;
nome2. mostrar ( ) ;

Depois de executar o código adicionado acima, temos a saída conforme mostrado abaixo. Para o objeto “name1”, exibiu o nome “Anna smith” e para o segundo objeto “name2” exibiu “Jhone Smith”. Mas desta vez nosso código funcionou corretamente sem nenhum erro.

Agora, vamos tentar outro método para executar nosso código com sucesso. Como nos casos anteriores, 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 argumento para o objeto repetindo o mesmo passo para o “nome2”. Agora, executamos o código mais uma vez.

int a Principal ( int argc, Caracteres ** argv ) {
meu_objeto nome1 ( 'Ana' , 'ferreiro' ) ;
meu_objeto nome2 ( 'joão', 'ferreiro' ) ;
nome1. mostrar ( ) ;
nome2. mostrar ( ) ;

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

Conclusão

Discutimos brevemente um erro que podemos enfrentar ao trabalhar em funções que são acessadas de classes. Também estudamos as causas e os métodos para resolver o erro “não viável sobrecarregado”. Principalmente, esse erro é difícil de entender para novos programadores, então tentamos facilitar a eliminação dele implementando exemplos e também com sua explicação.