A chamada de erro de sobrecarga é ambígua

A chamada de erro de sobrecarga é ambígua
Neste artigo, discutiremos um erro que ocorre na linguagem C ++ que é chamada de sobrecarga é ambígua. Este erro não afeta como o código é executado porque ocorre no tempo de compilação. Precisamos saber o que é a sobrecarga. Na sobrecarga, declaramos funções com os mesmos nomes, mas diferentes tipos de dados. O sistema diferencia entre as funções por causa de seus tipos de dados. Ambíguo refere -se a ter múltiplos significados ou semelhanças. De outras maneiras, podemos dizer que ambíguo significa pouco claro. Então, o erro se explica.

O erro ocorre quando uma função sobrecarregar o compilador interpreta as funções como uma única função e não pode fazer a diferença entre as duas funções sobrecarregadas com base em seus tipos de dados. Portanto, podemos dizer que esse erro ocorre devido à incapacidade do compilador de fazer uma seleção entre dois métodos corretamente sobrecarregados. Diz -se que todo esse processo é ambíguo porque não está claro. Códigos e programas que contêm essas ambiguidades não podem compilar e, eventualmente, gerar erros.

Sintaxe

Esta não é uma função ou biblioteca interna que estamos discutindo, mas é um erro, e um erro não tem uma sintaxe específica. Esta é a mensagem de que o compilador retorna quando recebemos nosso erro.

Erro: Chamada de sobrecarregada 'SetVal (int)' é ambígua

Nota: A palavra 'setVal (int)' não é constante.

Exemplo # 01:

Para entender melhor o nosso erro, agora realizaremos um exemplo para obter o erro e depois disso, resolveremos o erro. Para fazer isso, declaramos uma aula com o nome Class1. Na classe1, declaramos dados de char não assinados privados [bytes]. Na seção pública de nossa classe, declaramos duas funções com o mesmo nome, "Samefunc". Mas passamos "Int não assinado" para um como um parâmetro e "const char" para o outro como um parâmetro para que possamos sobrecarregar os métodos tendo os mesmos nomes e diferentes tipos de dados que parâmetros. No primeiro "mesmofunc", imprimimos "int" com o valor passado. Na segunda função, imprimimos “char” com o valor passado para nossa segunda função. Com o uso de um objeto em nossa classe, chamamos de método de método principal. Agora, vamos executar nosso código para ver o que acontece.

#incluir
#Define Bytes 8
usando namespace std;
Classe Classe1

privado:
dados de char não assinados [bytes];
público:
void Samefunc (int);
vazio Samefunc (const char *);
;
Void Class1 :: Samefunc (int t)

cout<<"int"<
Void Class1 :: Samefunc (const char *s)

cout<<"char"<
int main ()
Classe1 p;
p.Samefunc (0);
retornar 0;

Após a execução do nosso código, o sistema nos deu uma mensagem de erro. Se dermos uma olhada na mensagem de erro, podemos ver que a mensagem é quase a mesma que discutimos anteriormente. A única diferença é o nome da função. Dissemos a você anteriormente que o nome da função continuará mudando dependendo do que você declarou como o nome da sua função. De qualquer forma, o sistema nos deu o erro de que “a chamada de sobrecarga é ambígua”. Surge uma pergunta que passamos "0" para a nossa função e "0" é um número inteiro, então por que o sistema nos deu esse erro? Vamos desenterrar o motivo e tentar resolver o erro.

Agora, para resolver o erro, não digitaremos todo o nosso código novamente, simplesmente removemos a palavra -chave "não assinada" antes de "int" em nossa primeira função. Depois disso, executamos nosso código e o código foi executado com sucesso.

O erro foi causado porque o valor "0" tem dois significados na linguagem C ++. Em primeiro lugar, é um número inteiro. Em segundo lugar, no caso de personagens, é um ponteiro nulo constante. O compilador não conseguiu decidir em nosso caso se nosso parâmetro de entrada era um número inteiro ou um ponteiro nulo constante. Estávamos usando dois tipos de dados para nossos métodos int e char. Então, o compilador ficou confuso. Depois de remover a palavra -chave, o compilador tomou o parâmetro como um número inteiro e executou a função com um tipo de dados inteiro.

Exemplo # 02:

Para fazer você entender melhor o erro sendo discutido. Nós realizamos outro exemplo aqui. Neste exemplo, declaramos dois métodos com os mesmos nomes "AddVals". Mas a diferença entre as duas funções é que uma está tomando números inteiros como parâmetros de entrada e o outro está tomando carros alegóricos como parâmetros de entrada. Ambos os métodos têm o mesmo propósito, estão tomando parâmetros de entrada e resumem seus valores. No método principal, imprimimos o resultado depois que eles executam operações em nossos parâmetros de entrada. Vamos executar nosso código para verificar a saída.

#incluir
usando namespace std;
int addVals (int x, int y)

retornar x+y;

int addVals (float x, flutuar y)
retornar x+y;

int main ()
cout<retornar 0;

Mais uma vez, o sistema não nos deu nenhuma saída. Em vez disso, lançou uma mensagem de erro. A mensagem de erro é novamente a mesma que a anterior. Mas o nome da função é diferente. Nesse caso, passamos valores “1.2 "e" 3.4 ”para nossa função, o que fica claro que esses valores são flutuantes. Pode surgir uma pergunta sobre por que o sistema não realizou seu trabalho e nos deu o erro. Para conseguir o motivo, tentaremos resolver o erro e, ao fazer isso, obteremos nossa resposta também.

Agora, para resolver o erro que colocamos “1.2f ”e“ 3.4f ”com nossos parâmetros. Vamos executar o código novamente para ver se essa abordagem ajuda na resolução de nosso erro ou não. Vamos novamente executar nosso código para ver o que acontece.

O sistema não nos deu nenhum erro desta vez e executou com sucesso nosso código. Então, o problema em nosso código era que não estávamos colocando "f" em nossos parâmetros. Assumimos que o compilador os leria como valores de flutuação em vez de inteiros. Mas estávamos errados porque o compilador identifica todos os carros alegóricos como o dobro inicialmente, a menos que coloquemos "f" como um sufixo. Depois de colocarmos nosso sufixo, o código foi compilado com sucesso.

Conclusão

Neste guia, discutimos outro erro que é “Call of sobrecarga (função) é ambíguo”. Discutimos por que o erro ocorre. Também discutimos o conceito de sobrecarga de função para entender nosso erro de uma maneira melhor. Exemplos foram realizados para ajudá -lo a entender melhor a resolução do erro.